Epoll_wait fails due to EINTR, how to fix it?

My epoll_wait is not working due to EINTR. My gdb trace shows this:

enter code here 221 in ../nptl/sysdeps/pthread/createthread.c (gdb) 224 in ../nptl/sysdeps/pthread/createthread.c (gdb) [New Thread 0x40988490 (LWP 3589)] 227 in ../nptl/sysdeps/pthread/createthread.c (gdb) epoll_wait error in start timer: Measurement will befor entire duration of execution epoll_wait: Interrupted system call [Thread 0x40988490 (LWP 3589) exited] 

This line "epoll_wait error in the start timer: measurement will be for the entire duration of execution" will be printed by me in stderr.

I cannot figure out how to fix this EINTR so that epoll_wait can work. Any idea how this EINTR is generated by the GDB trace?

Please help me (this is urgent). Thanks in advance.

+4
source share
1 answer

A epoll_wait() signal handler will interrupt epoll_wait() , select() and similar system calls on any Unix or Linux. This is by design, so you can interrupt these system calls.

You cannot directly fix this. A typical solution is to explicitly check errno for EINTR and re-execute epoll_wait() :

 int nr; do { nr = epoll_wait(epfd, events, maxevents, timeout); } while (nr < 0 && errno == EINTR); 

Also see: gdb error: unable to execute epoll_wait: (4) Aborted system call

+15
source

All Articles