Strange behavior from poll() when interrupted by signal

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Yarin
Date: Sunday, December 12, 2010 - 12:00 pm

Hello,

As the documentation explains, when poll() is interrupted by a signal, it should return -1/EINTR.
However, I'm getting a return indicating that all of the polling descriptors are ready, but when I check their flags out, none of them are
ready. (Note that the same code behaves as expected on Linux)

This is on the Generic 4.7 release kernel.

Here's a snippet of code that I wrote to deal smoothly this behavior: (specifically, the last line)


   pollfd wait_fd[2];
   wait_fd[0].fd = sock_fd;
   wait_fd[0].events = POLLOUT;
   wait_fd[1].fd = abort_fd;
   wait_fd[1].events = POLLIN;
   int rfds;
   do
      rfds = poll(wait_fd, 2, NULL);
   while((rfds < 0 && errno == EINTR) || (rfds > 0 && !wait_fd[0].revents && !wait_fd[1].revents));


The thing is, I have no idea if this this is a feature or bug, or what. :-P

Thanks for any input,

Yarin
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Strange behavior from poll() when interrupted by signal, Yarin, (Sun Dec 12, 12:00 pm)
Re: Strange behavior from poll() when interrupted by signal, Joachim Schipper, (Mon Dec 13, 2:34 am)