From 66170ef8b36b499aa5b44ef10c1bd362a50f2636 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 3 Feb 2005 02:35:52 +0000 Subject: r5185: make all the events data structures private to events.c. This will make it possible to add optimisations to the events code such as keeping the next timed event in a sorted list, and using epoll for file descriptor events. I also removed the loop events code, as it wasn't being used anywhere, and changed timed events to always be one-shot (as adding a new timed event in the event handler is so easy to do if needed) (This used to be commit d7b4b6de51342a65bf46fce772d313f92f8d73d3) --- source4/rpc_server/dcerpc_server.c | 2 +- source4/rpc_server/dcerpc_sock.c | 4 ++-- source4/rpc_server/echo/rpc_echo.c | 15 +++++++-------- 3 files changed, 10 insertions(+), 11 deletions(-) (limited to 'source4/rpc_server') diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c index c21ab3d883..51902ecb87 100644 --- a/source4/rpc_server/dcerpc_server.c +++ b/source4/rpc_server/dcerpc_server.c @@ -878,7 +878,7 @@ NTSTATUS dcesrv_reply(struct dcesrv_call_state *call) if (call->conn->call_list && call->conn->call_list->replies) { if (call->conn->srv_conn && call->conn->srv_conn->event.fde) { - call->conn->srv_conn->event.fde->flags |= EVENT_FD_WRITE; + EVENT_FD_WRITEABLE(call->conn->srv_conn->event.fde); } } diff --git a/source4/rpc_server/dcerpc_sock.c b/source4/rpc_server/dcerpc_sock.c index ef5e7c269a..67b9065507 100644 --- a/source4/rpc_server/dcerpc_sock.c +++ b/source4/rpc_server/dcerpc_sock.c @@ -112,7 +112,7 @@ void dcesrv_sock_recv(struct stream_connection *conn, struct timeval t, uint16_t } if (dce_conn->call_list && dce_conn->call_list->replies) { - conn->event.fde->flags |= EVENT_FD_WRITE; + EVENT_FD_WRITEABLE(conn->event.fde); } } @@ -128,7 +128,7 @@ void dcesrv_sock_send(struct stream_connection *conn, struct timeval t, uint16_t } if (!dce_conn->call_list || !dce_conn->call_list->replies) { - conn->event.fde->flags &= ~EVENT_FD_WRITE; + EVENT_FD_NOT_WRITEABLE(conn->event.fde); } } diff --git a/source4/rpc_server/echo/rpc_echo.c b/source4/rpc_server/echo/rpc_echo.c index 009fa1aa6d..f78d1d231d 100644 --- a/source4/rpc_server/echo/rpc_echo.c +++ b/source4/rpc_server/echo/rpc_echo.c @@ -119,9 +119,11 @@ struct echo_TestSleep_private { struct echo_TestSleep *r; }; -static void echo_TestSleep_handler(struct event_context *ev, struct timed_event *te, struct timeval t) +static void echo_TestSleep_handler(struct event_context *ev, struct timed_event *te, + struct timeval t, void *private) { - struct echo_TestSleep_private *p = te->private; + struct echo_TestSleep_private *p = talloc_get_type(private, + struct echo_TestSleep_private); struct echo_TestSleep *r = p->r; NTSTATUS status; @@ -136,7 +138,6 @@ static void echo_TestSleep_handler(struct event_context *ev, struct timed_event static long echo_TestSleep(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct echo_TestSleep *r) { - struct timed_event te; struct echo_TestSleep_private *p; if (!(dce_call->state_flags & DCESRV_CALL_STATE_FLAG_MAY_ASYNC)) { @@ -154,11 +155,9 @@ static long echo_TestSleep(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_c p->dce_call = dce_call; p->r = r; - te.handler = echo_TestSleep_handler; - te.private = p; - te.next_event = timeval_add(&dce_call->time, r->in.seconds, 0); - - event_add_timed(dce_call->event_ctx, &te, p); + event_add_timed(dce_call->event_ctx, p, + timeval_add(&dce_call->time, r->in.seconds, 0), + echo_TestSleep_handler, p); dce_call->state_flags |= DCESRV_CALL_STATE_FLAG_ASYNC; return 0; -- cgit