http://bugs.winehq.org/show_bug.cgi?id=14195
--- Comment #8 from Dmitriy Anisimkov anisimkov@ada-ru.org 2009-01-20 05:51:02 --- (In reply to comment #7)
The patch is wrong, you can't just restart the poll, you need to update the timeout.
Wine already have such ignorance without timeout recalculation.
static inline int do_block( int fd, int events, int timeout ) { struct pollfd pfd; int ret;
pfd.fd = fd; pfd.events = events;
while ((ret = poll(&pfd, 1, timeout)) < 0) { if (errno != EINTR) return -1; } if( ret == 0 ) return 0; return pfd.revents; }
I do not think that timeout recalculation is really necessary. This situation very rare. If we do not recalculate timeout, we would have just a bit longer timeout in very rare cases. The timeout is not so explicit requierments for most cases. On timeout recalculation, we would pay by one more system call to get system time before call "poll".
Do you really stand on timeout recalculation ?