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



Reply via email to