r21171: fixed a bug related to recursive event handling.
commitb9f10ebb99a76820085af514b102ff75a5694c57
authorAndrew Tridgell <tridge@samba.org>
Tue, 6 Feb 2007 04:43:48 +0000 (6 04:43 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:44:41 +0000 (10 14:44 -0500)
tree50d771fa7cd70c41cf133f6570700d036b41fcc6
parent96325d3f763a470272c3b4373afa96f6d54f37b9
r21171: fixed a bug related to recursive event handling.

If this happens:

  - two sockets are readable, and select/epoll/aio returns both of
    them
  - read event on socket1 is called
  - inside that read event an event_loop_once is called, this returns that
    socket2 is readable
  - read event on socket2 is called
  - event_loop_once returns
  - top level event handler then calls read event on socket2 (as it
    still has that listed as readable)
  - read handler for socket2 returns zero byte read, which is
    interpreted as end of file
  - socket is incorrectly closed

this happened with ctdb, but it could happen anywhere (just
rarely). The fix is trivial - ensure we break out of the event loop
when we have been called recursively.
(This used to be commit e042002bb5ee8974220e1ade56b64389571f75a6)
source4/lib/events/events_aio.c
source4/lib/events/events_epoll.c
source4/lib/events/events_select.c
source4/lib/events/events_standard.c