Charles-François Natali added the comment:

> That assumes that epoll_wait() is supposed to return *all* ready fds.  But 
> that is not possible because maxevents is finite.  If you want all events 
> then obviously you may need to call epoll_wait() multiple times.

Yes, but the problem is that between two epoll_wait() calls, the
readiness of the FDs can have changed: and if that happens, you'll get
the same list over and over.

> The program can only terminate when the outer
>
>     while all_writers - seen_writers:
>         ...
>
> loop terminates.  So seen_writers == all_writers, and every fd has been 
> reported.

Yes, but there are no event generated between calls to epoll_wait() in
your inner loop.
In a typical usage of select()/poll() epoll() will look like:

while True:
    evts = poll()
    for evt in evts:
        do_something(fd)

and between two calls to poll(), you can get new events (new
connections, space in the socket buffer, etc). The pipe
filling/draining is used to generate new events. Your modification
doesn't take that into account.

> This is the part I disagree with -- I think it makes all the difference.  
> Please try making such a modification.

Will do.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue16873>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to