epoll patch - status?

Mike McCormack mike at codeweavers.com
Thu Sep 9 02:56:59 CDT 2004


Shachar Shemesh wrote:

>> +    r = epoll_ctl( epoll_fd, EPOLL_CTL_DEL, fd, &eev );
>> +    assert( 0 == r );
>>  
>>
> This assert still depends on the removal semantics. If it's ok for the 
> users to close the Unix fd before removing it from the poll array, you 
> may find that it's already gone and the assert will fail.
> 
> If you like, make that:
> assert( 0 == r || errno == ENOENT );

I'm going to leave it like it is until I find a case where the fd is 
closed before it is removed from the pollusers[] array.  I think perhaps 
that cannot and should not happen.

>> +            epoll_ev_last = &ev[ret];
>>  
>>
> There is no need to do that every time.

Oops.  I had intended it move it outside of the loop, not just outside 
the if().

> Why not just get rid of epoll_ev_first and epoll_ev_last, and check that 
> pollfd[user]!=0?

Isn't it possible that another fd could be added and fill pollfd[user] 
after it was removed?

>> +EXTRACFLAGS="$EXTRACFLAGS -Wsign-compare"
>>  
>>
> Why is this necessary?

Sorry. Some extra stuff I have in my tree.  It shouldn't be in there.

Have you tried running your tests with my patch?  I've only run it with 
IE6 and a few winelib programs.

Just got your last mail regarding races... From what I can see, it 
should now behave the same way as select_loop().

Todo:
* fix init_fd() declaration
* get more comment from Alexandre
* maybe fix configure tests. My system had sys/epoll.h but no libepoll

Mike




More information about the wine-devel mailing list