From ee5ee5c538db0622283886988e66641c5536a0b4 Mon Sep 17 00:00:00 2001 From: Mike Kaplinskiy Date: Wed, 19 May 2010 16:14:08 -0400 Subject: [PATCH] server: Move async activation into separate function. --- server/sock.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/server/sock.c b/server/sock.c index 0a1bb40e2b1..0c8cb5401b1 100644 --- a/server/sock.c +++ b/server/sock.c @@ -295,6 +295,23 @@ static inline int sock_error( struct fd *fd ) return optval; } +static void sock_dispatch_asyncs( struct sock *sock, int event ) +{ + if ( sock->flags & WSA_FLAG_OVERLAPPED ) + { + if ( event & (POLLIN|POLLPRI|POLLERR|POLLHUP) && async_waiting( sock->read_q )) + { + if (debug_level) fprintf( stderr, "activating read queue for socket %p\n", sock ); + async_wake_up( sock->read_q, STATUS_ALERTED ); + } + if ( event & (POLLOUT|POLLERR|POLLHUP) && async_waiting( sock->write_q )) + { + if (debug_level) fprintf( stderr, "activating write queue for socket %p\n", sock ); + async_wake_up( sock->write_q, STATUS_ALERTED ); + } + } +} + static void sock_poll_event( struct fd *fd, int event ) { struct sock *sock = get_fd_user( fd ); @@ -422,23 +439,11 @@ static void sock_poll_event( struct fd *fd, int event ) event |= POLLHUP; } + sock_dispatch_asyncs( sock, event ); + /* wake up anyone waiting for whatever just happened */ sock_wake_up( sock ); - if ( sock->flags & WSA_FLAG_OVERLAPPED ) - { - if ( event & (POLLIN|POLLPRI|POLLERR|POLLHUP) && async_waiting( sock->read_q )) - { - if (debug_level) fprintf( stderr, "activating read queue for socket %p\n", sock ); - async_wake_up( sock->read_q, STATUS_ALERTED ); - } - if ( event & (POLLOUT|POLLERR|POLLHUP) && async_waiting( sock->write_q )) - { - if (debug_level) fprintf( stderr, "activating write queue for socket %p\n", sock ); - async_wake_up( sock->write_q, STATUS_ALERTED ); - } - } - /* if anyone is stupid enough to wait on the socket object itself, * maybe we should wake them up too, just in case? */ wake_up( &sock->obj, 0 );