Shachar Shemesh wrote:
However, with your patch, things are different. The "revents" equivalent is stored in an array dedicated to the epoll results, and it is impossible for the del-user function to clear it. We do check that "Events" is not zero, but it's not. We therefor think that the events flagged for the old occupant of user #3 actually belong to the new occupant, and we handle it incorrectly.
I've sent three patches.
The first one (epoll-mm-3.diff) had this problem.
The second one (epoll-mm-4.diff) used pointers named epoll_ev_first and epoll_ev_last to locate the returned events and clear them in do_epoll_remove(), so did not have the problem.
The third one (epoll-mm-5.diff) [*] distributes the events to the pollfd array in epoll_loop(), and they are cleared in set_fd_events(), which is the same mechanism that is used by select_loop().
Do you still think my third patch has the problem?
Mike
[*] http://www.winehq.org/hypermail/wine-patches/2004/09/0172.html