diff options
| author | Volker Lendecke <vl@samba.org> | 2009-12-09 17:14:16 +0100 |
|---|---|---|
| committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2009-12-10 07:52:16 +1100 |
| commit | a0d9bd3c13aaec81acfba7d3fddf26fce27d3edb (patch) | |
| tree | 801f896092f2dc85be861432acb859582966f7d2 | |
| parent | 47f8c380d24d93a81d02cfc926268f29fe88d24a (diff) | |
Run only one event for each epoll_wait/select call
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.
(This used to be ctdb commit a78b8ea7168e5fdb2d62379ad3112008b2748576)
| -rw-r--r-- | ctdb/include/ctdb_private.h | 2 | ||||
| -rw-r--r-- | ctdb/lib/events/events_epoll.c | 4 | ||||
| -rw-r--r-- | ctdb/lib/events/events_select.c | 4 | ||||
| -rw-r--r-- | ctdb/server/ctdb_daemon.c | 1 | ||||
| -rw-r--r-- | ctdb/server/ctdb_server.c | 2 |
5 files changed, 5 insertions, 8 deletions
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h index 142bbd5c71..4467e0fc3b 100644 --- a/ctdb/include/ctdb_private.h +++ b/ctdb/include/ctdb_private.h @@ -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; }; diff --git a/ctdb/lib/events/events_epoll.c b/ctdb/lib/events/events_epoll.c index 99fa36c96e..47bf2b3c38 100644 --- a/ctdb/lib/events/events_epoll.c +++ b/ctdb/lib/events/events_epoll.c @@ -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; } } diff --git a/ctdb/lib/events/events_select.c b/ctdb/lib/events/events_select.c index faccc6d21a..885bd82590 100644 --- a/ctdb/lib/events/events_select.c +++ b/ctdb/lib/events/events_select.c @@ -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; } } } diff --git a/ctdb/server/ctdb_daemon.c b/ctdb/server/ctdb_daemon.c index 0abea44a6e..9ade55aca8 100644 --- a/ctdb/server/ctdb_daemon.c +++ b/ctdb/server/ctdb_daemon.c @@ -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 diff --git a/ctdb/server/ctdb_server.c b/ctdb/server/ctdb_server.c index 77928ea340..3ccbee75bb 100644 --- a/ctdb/server/ctdb_server.c +++ b/ctdb/server/ctdb_server.c @@ -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) |
