diff options
Diffstat (limited to '')
| -rw-r--r-- | src/event/modules/ngx_epoll_module.c | 2 | ||||
| -rw-r--r-- | src/event/modules/ngx_kqueue_module.c | 22 | ||||
| -rw-r--r-- | src/event/modules/ngx_rtsig_module.c | 2 | ||||
| -rw-r--r-- | src/event/ngx_event.c | 4 | ||||
| -rw-r--r-- | src/event/ngx_event.h | 8 | ||||
| -rw-r--r-- | src/event/ngx_event_accept.c | 6 | ||||
| -rw-r--r-- | src/event/ngx_event_connect.c | 6 | ||||
| -rw-r--r-- | src/event/ngx_event_openssl.c | 1 |
8 files changed, 32 insertions, 19 deletions
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c index 4067fd886..45791e9c7 100644 --- a/src/event/modules/ngx_epoll_module.c +++ b/src/event/modules/ngx_epoll_module.c @@ -173,7 +173,7 @@ static int ngx_epoll_init(ngx_cycle_t *cycle) #else ngx_event_flags = NGX_USE_LEVEL_EVENT #endif - |NGX_HAVE_GREEDY_EVENT + |NGX_USE_GREEDY_EVENT |NGX_USE_EPOLL_EVENT; return NGX_OK; diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c index db5b75683..e6bebb559 100644 --- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -194,10 +194,10 @@ static ngx_int_t ngx_kqueue_init(ngx_cycle_t *cycle) #else |NGX_USE_LEVEL_EVENT #endif -#if (HAVE_LOWAT_EVENT) - |NGX_HAVE_LOWAT_EVENT +#if (NGX_HAVE_LOWAT_EVENT) + |NGX_USE_LOWAT_EVENT #endif - |NGX_HAVE_KQUEUE_EVENT; + |NGX_USE_KQUEUE_EVENT; return NGX_OK; } @@ -245,6 +245,8 @@ static ngx_int_t ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) return NGX_ERROR; } +#if 1 + if (nchanges > 0 && ev->index < (u_int) nchanges && ((uintptr_t) change_list[ev->index].udata & (uintptr_t) ~1) @@ -262,7 +264,8 @@ static ngx_int_t ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) ngx_event_ident(ev->data), event); if (ev->index < (u_int) --nchanges) { - e = (ngx_event_t *) change_list[nchanges].udata; + e = (ngx_event_t *) + ((uintptr_t) change_list[nchanges].udata & (uintptr_t) ~1); change_list[ev->index] = change_list[nchanges]; e->index = ev->index; } @@ -282,6 +285,8 @@ static ngx_int_t ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) return NGX_ERROR; } +#endif + rc = ngx_kqueue_set_event(ev, event, EV_ADD|EV_ENABLE|flags); ngx_mutex_unlock(list_mutex); @@ -302,6 +307,8 @@ static ngx_int_t ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) return NGX_ERROR; } +#if 1 + if (nchanges > 0 && ev->index < (u_int) nchanges && ((uintptr_t) change_list[ev->index].udata & (uintptr_t) ~1) @@ -314,7 +321,8 @@ static ngx_int_t ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) /* if the event is still not passed to a kernel we will not pass it */ if (ev->index < (u_int) --nchanges) { - e = (ngx_event_t *) change_list[nchanges].udata; + e = (ngx_event_t *) + ((uintptr_t) change_list[nchanges].udata & (uintptr_t) ~1); change_list[ev->index] = change_list[nchanges]; e->index = ev->index; } @@ -324,6 +332,8 @@ static ngx_int_t ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) return NGX_OK; } +#endif + /* * when the file descriptor is closed the kqueue automatically deletes * its filters so we do not need to delete explicity the event @@ -393,7 +403,7 @@ static ngx_int_t ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags) kev->data = 0; } else { -#if (HAVE_LOWAT_EVENT) +#if (NGX_HAVE_LOWAT_EVENT) if (flags & NGX_LOWAT_EVENT) { kev->fflags = NOTE_LOWAT; kev->data = ev->available; diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c index 72c5b7c2d..4f2f48097 100644 --- a/src/event/modules/ngx_rtsig_module.c +++ b/src/event/modules/ngx_rtsig_module.c @@ -158,7 +158,7 @@ static ngx_int_t ngx_rtsig_init(ngx_cycle_t *cycle) ngx_event_actions = ngx_rtsig_module_ctx.actions; - ngx_event_flags = NGX_USE_RTSIG_EVENT|NGX_HAVE_GREEDY_EVENT; + ngx_event_flags = NGX_USE_RTSIG_EVENT|NGX_USE_GREEDY_EVENT; return NGX_OK; } diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c index 4718dcd20..f006c6ba5 100644 --- a/src/event/ngx_event.c +++ b/src/event/ngx_event.c @@ -465,9 +465,9 @@ ngx_int_t ngx_send_lowat(ngx_connection_t *c, size_t lowat) { int sndlowat; -#if (HAVE_LOWAT_EVENT) +#if (NGX_HAVE_LOWAT_EVENT) - if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { + if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { c->write->available = lowat; return NGX_OK; } diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h index c173adc05..f341a14c6 100644 --- a/src/event/ngx_event.h +++ b/src/event/ngx_event.h @@ -240,19 +240,19 @@ extern ngx_event_actions_t ngx_event_actions; * The event filter has kqueue features - the eof flag, errno, * available data, etc. */ -#define NGX_HAVE_KQUEUE_EVENT 0x00000008 +#define NGX_USE_KQUEUE_EVENT 0x00000008 /* * The event filter supports low water mark - kqueue's NOTE_LOWAT. * kqueue in FreeBSD 4.1-4.2 has no NOTE_LOWAT so we need a separate flag. */ -#define NGX_HAVE_LOWAT_EVENT 0x00000010 +#define NGX_USE_LOWAT_EVENT 0x00000010 /* * The event filter requires to do i/o operation until EAGAIN - * epoll, rt signals. */ -#define NGX_HAVE_GREEDY_EVENT 0x00000020 +#define NGX_USE_GREEDY_EVENT 0x00000020 /* * The event filter is epoll, @@ -571,7 +571,7 @@ ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, size_t lowat) ngx_connection_t *c; if (lowat) { - c = wev->data; + c = (ngx_connection_t *) wev->data; if (ngx_send_lowat(c, lowat) == NGX_ERROR) { return NGX_ERROR; diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c index 5a5e0e170..9ae5ccd11 100644 --- a/src/event/ngx_event_accept.c +++ b/src/event/ngx_event_accept.c @@ -39,7 +39,7 @@ void ngx_event_accept(ngx_event_t *ev) if (ngx_event_flags & NGX_USE_RTSIG_EVENT) { ev->available = 1; - } else if (!(ngx_event_flags & NGX_HAVE_KQUEUE_EVENT)) { + } else if (!(ngx_event_flags & NGX_USE_KQUEUE_EVENT)) { ev->available = ecf->multi_accept; } @@ -118,7 +118,7 @@ void ngx_event_accept(ngx_event_t *ev) ls->listening->addr_text.data); if (err == NGX_ECONNABORTED) { - if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { + if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { ev->available--; } @@ -342,7 +342,7 @@ void ngx_event_accept(ngx_event_t *ev) ls->listening->handler(c); - if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { + if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { ev->available--; } diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c index c1e6c1935..b41eca771 100644 --- a/src/event/ngx_event_connect.c +++ b/src/event/ngx_event_connect.c @@ -296,6 +296,9 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc) if (ngx_event_flags & NGX_USE_AIO_EVENT) { + ngx_log_debug1(NGX_LOG_DEBUG_EVENT, pc->log, ngx_socket_errno, + "connect(): %d", rc); + /* aio, iocp */ if (ngx_blocking(s) == -1) { @@ -311,8 +314,7 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc) } /* - * aio allows to post operation on non-connected socket - * at least in FreeBSD. + * FreeBSD aio allows to post operation on non-connected socket. * NT does not support it. * * TODO: check in Win32, etc. As workaround we can use NGX_ONESHOT_EVENT diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c index 151cc429f..7a7038d4f 100644 --- a/src/event/ngx_event_openssl.c +++ b/src/event/ngx_event_openssl.c @@ -86,6 +86,7 @@ ngx_int_t ngx_ssl_recv(ngx_connection_t *c, u_char *buf, size_t size) ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr); if (sslerr == SSL_ERROR_WANT_READ) { + c->read->ready = 0; return NGX_AGAIN; } |
