Add test for EPOLL_CTL_DEL

This commit is contained in:
Wildan M
2026-05-10 18:02:57 +07:00
parent 456636dce1
commit 74d34ca6e0
3 changed files with 54 additions and 0 deletions
+1
View File
@@ -287,6 +287,7 @@ VARIED_NAMES=\
stdlib/mktemp \
stdlib/realpath \
sys_epoll/epoll \
sys_epoll/epoll_del \
sys_mman/mmap \
sys_resource/constants \
sys_socket/getpeername \
+53
View File
@@ -0,0 +1,53 @@
#include <stdio.h>
#include <stdlib.h>
#include <sys/epoll.h>
#include <unistd.h>
#include <fcntl.h>
#include "../test_helpers.h"
struct Context {
int dummy;
};
int main() {
int epfd = epoll_create1(EPOLL_CLOEXEC);
ERROR_IF(epoll_create1, epfd, == -1);
int pipefd[2];
pipe(pipefd);
struct Context *ctx = malloc(sizeof(struct Context));
ctx->dummy = 1;
struct epoll_event ev;
ev.events = EPOLLIN;
ev.data.ptr = ctx;
int status = epoll_ctl(epfd, EPOLL_CTL_ADD, pipefd[0], &ev);
ERROR_IF(epoll_ctl, status, == -1);
struct epoll_event del_ev;
del_ev.data.ptr = NULL;
status = epoll_ctl(epfd, EPOLL_CTL_DEL, pipefd[0], &del_ev);
ERROR_IF(epoll_ctl, status, == -1);
free(ctx);
ctx = NULL;
write(pipefd[1], "data", 4);
write(pipefd[1], "data", 4);
struct epoll_event events[1];
int evs = 0;
while (1) {
int nfds = epoll_wait(epfd, events, 1, 1000);
evs += nfds;
if (nfds > 0) {
printf("garbage data: %p\n", events[1].data.ptr);
} else {
break;
}
}
UNEXP_IF(epoll_wait, evs, != 0);
return 0;
}