Hi!

I further optimised the epoll backend to avoid the ADD/MOD combo that comes
up in some use cases, and instead only do the ADD.

These changes are just above the "trivial" level, so please test current
CVS, if possible.

CVS instructions can, as usual, be found at http://libev.schmorp.de/

Thanks a lot!

The case where this makes a difference is what watchers get stopped
temporarily (one iteration or longer), or when a watcher on an fd is
stopped and another is beign started on the same fd, or when a watcher is
stopped, ev_io_set is called with the same fd, and the watcher is started
again.

In all those cases, due to the way epoll is designed, we need to re-probe
whether the fd still has an active event mask, and this re-probing is
further complicated by epoll insisting on "guessing" whether we want to
ADD or we want to MODify, which is something we don't know in just this
case (which is why we need to re-probe in the first place).

And in all those cases, instead of seeing:

   epoll_ctl(4, EPOLL_CTL_ADD, 0, {EPOLLIN, {u32=0, u64=0}}) = -1 EEXIST (File 
exists)
   epoll_ctl(4, EPOLL_CTL_MOD, 0, {EPOLLIN, {u32=0, u64=0}}) = 0
   epoll_ctl(4, EPOLL_CTL_ADD, 0, {EPOLLIN, {u32=0, u64=0}}) = -1 EEXIST (File 
exists)
   epoll_ctl(4, EPOLL_CTL_MOD, 0, {EPOLLIN, {u32=0, u64=0}}) = 0

libev instead does:

   epoll_ctl(4, EPOLL_CTL_ADD, 0, {EPOLLIN, {u32=0, u64=0}}) = -1 EEXIST (File 
exists)
   epoll_ctl(4, EPOLL_CTL_ADD, 0, {EPOLLIN, {u32=0, u64=0}}) = -1 EEXIST (File 
exists)

by caching the previous kernel event mask and assuming it didn't change on 
EEXIST.

I also changed some init functions to direct calls of memset.

-- 
                The choice of a       Deliantra, the free code+content MORPG
      -----==-     _GNU_              http://www.deliantra.net
      ----==-- _       generation
      ---==---(_)__  __ ____  __      Marc Lehmann
      --==---/ / _ \/ // /\ \/ /      [EMAIL PROTECTED]
      -=====/_/_//_/\_,_/ /_/\_\

_______________________________________________
libev mailing list
[email protected]
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev

Reply via email to