Run only one event for each epoll_wait/select call
authorVolker Lendecke <vl@samba.org>
Wed, 9 Dec 2009 16:14:16 +0000 (17:14 +0100)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Wed, 9 Dec 2009 20:52:16 +0000 (07:52 +1100)
This might be a bit less efficient, but experience in winbind has shown that
event callbacks can trigger changes in the socket state in very hard to
diagnose ways.

include/ctdb_private.h
lib/events/events_epoll.c
lib/events/events_select.c
server/ctdb_daemon.c
server/ctdb_server.c

index 142bbd5c716b79159d5e64b17d50c6d97e5ead93..4467e0fc3b7aef292a15132a5c2128e08e3e58e8 100644 (file)
@@ -478,6 +478,8 @@ struct ctdb_db_context {
        struct ctdb_traverse_local_handle *traverse;
        bool transaction_active;
        struct ctdb_vacuum_handle *vacuum_handle;
+
+       uint8_t **holdback_keys;
 };
 
 
index 99fa36c96e9431500d3aa0af1c436a15744bc667..47bf2b3c3889194ad04f96d84a3354c43bddf6ad 100644 (file)
@@ -321,9 +321,7 @@ static int epoll_event_loop(struct epoll_event_context *epoll_ev, struct timeval
                if (events[i].events & EPOLLOUT) flags |= EVENT_FD_WRITE;
                if (flags) {
                        fde->handler(epoll_ev->ev, fde, flags, fde->private_data);
-                       if (destruction_count != epoll_ev->destruction_count) {
-                               break;
-                       }
+                       break;
                }
        }
 
index faccc6d21a0944bf49a4574085b258955e82c27f..885bd82590f91c1978c95dc8e95ed60e5fac4e50 100644 (file)
@@ -241,9 +241,7 @@ static int select_event_loop_select(struct select_event_context *select_ev, stru
                        if (FD_ISSET(fde->fd, &w_fds)) flags |= EVENT_FD_WRITE;
                        if (flags) {
                                fde->handler(select_ev->ev, fde, flags, fde->private_data);
-                               if (destruction_count != select_ev->destruction_count) {
-                                       break;
-                               }
+                               break;
                        }
                }
        }
index 0abea44a6e6b90a4c244c5fb003522b75db505cd..9ade55aca86bc66ef1cca45c44402c2081b6dd16 100644 (file)
@@ -134,7 +134,6 @@ static void daemon_message_handler(struct ctdb_context *ctdb, uint64_t srvid,
 
        talloc_free(r);
 }
-                                          
 
 /*
   this is called when the ctdb daemon received a ctdb request to 
index 77928ea3404b43e16bc78534bce7b994841e84c0..3ccbee75bb6d56d50d7571da697f465eeaee1b0c 100644 (file)
@@ -463,7 +463,7 @@ struct queue_next {
 
 
 /*
-  trigered when a deferred packet is due
+  triggered when a deferred packet is due
  */
 static void queue_next_trigger(struct event_context *ev, struct timed_event *te, 
                               struct timeval t, void *private_data)