diff options
author | Volker Lendecke <vlendec@samba.org> | 2007-05-16 13:02:53 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:22:10 -0500 |
commit | 56e6e5b8ca9c42f53425ebc48157e4041e52a878 (patch) | |
tree | a15e1badb434d9341ecd30bdbb8711c654e3289e /source3/lib | |
parent | 8b79106829034ff543406b68fd2ce6e84a28b5e4 (diff) | |
download | samba-56e6e5b8ca9c42f53425ebc48157e4041e52a878.tar.gz samba-56e6e5b8ca9c42f53425ebc48157e4041e52a878.tar.bz2 samba-56e6e5b8ca9c42f53425ebc48157e4041e52a878.zip |
r22934: Change smbcontrol to use messaging_register instead of message_register
(This used to be commit e3d985c581ffc597aea932858d27c421643d2868)
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/events.c | 47 | ||||
-rw-r--r-- | source3/lib/messages.c | 7 |
2 files changed, 52 insertions, 2 deletions
diff --git a/source3/lib/events.c b/source3/lib/events.c index a00db77b6b..77d18ec13d 100644 --- a/source3/lib/events.c +++ b/source3/lib/events.c @@ -185,20 +185,27 @@ void event_fd_set_not_readable(struct fd_event *fde) fde->flags &= ~EVENT_FD_READ; } -void event_add_to_select_args(struct event_context *event_ctx, +/* + * Return if there's something in the queue + */ + +BOOL event_add_to_select_args(struct event_context *event_ctx, const struct timeval *now, fd_set *read_fds, fd_set *write_fds, struct timeval *timeout, int *maxfd) { struct fd_event *fde; struct timeval diff; + BOOL ret = False; for (fde = event_ctx->fd_events; fde; fde = fde->next) { if (fde->flags & EVENT_FD_READ) { FD_SET(fde->fd, read_fds); + ret = True; } if (fde->flags & EVENT_FD_WRITE) { FD_SET(fde->fd, write_fds); + ret = True; } if ((fde->flags & (EVENT_FD_READ|EVENT_FD_WRITE)) @@ -208,11 +215,13 @@ void event_add_to_select_args(struct event_context *event_ctx, } if (event_ctx->timed_events == NULL) { - return; + return ret; } diff = timeval_until(now, &event_ctx->timed_events->when); *timeout = timeval_min(timeout, &diff); + + return True; } BOOL run_events(struct event_context *event_ctx, @@ -297,6 +306,40 @@ struct timeval *get_timed_events_timeout(struct event_context *event_ctx, return to_ret; } +int event_loop_once(struct event_context *ev) +{ + struct timeval now, to; + fd_set r_fds, w_fds; + int maxfd = 0; + int ret; + + FD_ZERO(&r_fds); + FD_ZERO(&w_fds); + + to.tv_sec = 9999; /* Max timeout */ + to.tv_usec = 0; + + GetTimeOfDay(&now); + + if (!event_add_to_select_args(ev, &now, &r_fds, &w_fds, &to, &maxfd)) { + return -1; + } + + if (timeval_is_zero(&to)) { + run_events(ev, 0, NULL, NULL); + return 0; + } + + ret = sys_select(maxfd, &r_fds, &w_fds, NULL, &to); + + if (ret == -1 && errno != EINTR) { + return -1; + } + + run_events(ev, ret, &r_fds, &w_fds); + return 0; +} + struct event_context *event_context_init(TALLOC_CTX *mem_ctx) { return TALLOC_ZERO_P(NULL, struct event_context); diff --git a/source3/lib/messages.c b/source3/lib/messages.c index 9c1eba7b1c..4cbdda61ee 100644 --- a/source3/lib/messages.c +++ b/source3/lib/messages.c @@ -723,6 +723,7 @@ struct messaging_callback { struct messaging_context { struct server_id id; + struct event_context *event_ctx; struct messaging_callback *callbacks; }; @@ -740,6 +741,11 @@ static int messaging_context_destructor(struct messaging_context *ctx) return 0; } +struct event_context *messaging_event_context(struct messaging_context *msg_ctx) +{ + return msg_ctx->event_ctx; +} + struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx, struct server_id server_id, struct event_context *ev) @@ -751,6 +757,7 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx, } ctx->id = server_id; + ctx->event_ctx = ev; talloc_set_destructor(ctx, messaging_context_destructor); if (!message_init(ctx)) { |