diff options
author | Igor Sysoev <igor@sysoev.ru> | 2005-12-05 16:18:09 +0300 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2005-12-05 16:18:09 +0300 |
commit | d3283ff9224a41a1a24c2d89f671811c0747480a (patch) | |
tree | e122c436f72f587622e8ec0e75632434045e330d /src/event | |
parent | 0624ed3d7eaa1995d9e5ec4292bd1eccda09cafc (diff) |
nginx-0.3.13-RELEASE importrelease-0.3.13
*) Feature: the IMAP/POP3 proxy supports STARTTLS and STLS.
*) Bugfix: the IMAP/POP3 proxy did not work with the select, poll, and
/dev/poll methods.
*) Bugfix: in SSI handling.
*) Bugfix: now Solaris sendfilev() is not used to transfer the client
request body to FastCGI-server via the unix domain socket.
*) Bugfix: the "auth_basic" directive did not disable the
authorization; the bug had appeared in 0.3.11.
Diffstat (limited to 'src/event')
-rw-r--r-- | src/event/modules/ngx_kqueue_module.c | 26 | ||||
-rw-r--r-- | src/event/ngx_event_connect.c | 5 | ||||
-rw-r--r-- | src/event/ngx_event_openssl.c | 21 | ||||
-rw-r--r-- | src/event/ngx_event_openssl.h | 2 | ||||
-rw-r--r-- | src/event/ngx_event_pipe.c | 22 |
5 files changed, 45 insertions, 31 deletions
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c index 839afb575..88b5b3fd5 100644 --- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -276,8 +276,10 @@ static ngx_int_t ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) { ngx_int_t rc; +#if 0 ngx_event_t *e; ngx_connection_t *c; +#endif ev->active = 1; ev->disabled = 0; @@ -285,12 +287,11 @@ ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) ngx_mutex_lock(list_mutex); -#if 1 +#if 0 - if (nchanges > 0 - && ev->index < (u_int) nchanges + if (ev->index < (u_int) nchanges && ((uintptr_t) change_list[ev->index].udata & (uintptr_t) ~1) - == (uintptr_t) ev) + == (uintptr_t) ev) { if (change_list[ev->index].flags == EV_DISABLE) { @@ -346,12 +347,9 @@ ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) ngx_mutex_lock(list_mutex); -#if 1 - - if (nchanges > 0 - && ev->index < (u_int) nchanges + if (ev->index < (u_int) nchanges && ((uintptr_t) change_list[ev->index].udata & (uintptr_t) ~1) - == (uintptr_t) ev) + == (uintptr_t) ev) { ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, "kevent deleted: %d: ft:%d", @@ -359,7 +357,9 @@ 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) { + nchanges--; + + if (ev->index < (u_int) nchanges) { e = (ngx_event_t *) ((uintptr_t) change_list[nchanges].udata & (uintptr_t) ~1); change_list[ev->index] = change_list[nchanges]; @@ -371,8 +371,6 @@ 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 @@ -551,7 +549,9 @@ ngx_kqueue_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, if (event_list[i].flags & EV_ERROR) { ngx_log_error(NGX_LOG_ALERT, cycle->log, event_list[i].data, - "kevent() error on %d", event_list[i].ident); + "kevent() error on %d filter:%d flags:%04Xd", + event_list[i].ident, event_list[i].filter, + event_list[i].flags); continue; } diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c index 34ee2525f..e4ca23840 100644 --- a/src/event/ngx_event_connect.c +++ b/src/event/ngx_event_connect.c @@ -181,6 +181,11 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc) if (peer->sockaddr->sa_family != AF_INET) { c->tcp_nopush = NGX_TCP_NOPUSH_DISABLED; c->tcp_nodelay = NGX_TCP_NODELAY_DISABLED; + +#if (NGX_SOLARIS) + /* Solaris's sendfilev() supports AF_NCA, AF_INET, and AF_INET6 */ + c->sendfile = 0; +#endif } rev = c->read; diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c index 7efb713e2..441472e42 100644 --- a/src/event/ngx_event_openssl.c +++ b/src/event/ngx_event_openssl.c @@ -301,12 +301,12 @@ ngx_ssl_handshake(ngx_connection_t *c) *d = '\0'; - ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL: %s, cipher: \"%s\"", SSL_get_version(c->ssl->connection), &buf[1]); if (SSL_session_reused(c->ssl->connection)) { - ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, + ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL reused session"); } @@ -630,7 +630,7 @@ ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit) for ( ;; ) { while (in && buf->last < buf->end) { - if (in->buf->last_buf) { + if (in->buf->last_buf || in->buf->flush) { flush = 1; } @@ -645,11 +645,6 @@ ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit) size = buf->end - buf->last; } - /* - * TODO: the taking in->buf->flush into account can be - * implemented using the limit on the higher level - */ - if (send + size > limit) { size = (ssize_t) (limit - send); flush = 1; @@ -943,7 +938,7 @@ ngx_ssl_connection_error(ngx_connection_t *c, int sslerr, ngx_err_t err, } -void +void ngx_cdecl ngx_ssl_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err, char *fmt, ...) { u_long n; @@ -958,7 +953,13 @@ ngx_ssl_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err, char *fmt, ...) p = ngx_cpystrn(p, (u_char *) " (SSL:", last - p); - while (p < last && (n = ERR_get_error())) { + while (p < last) { + + n = ERR_get_error(); + + if (n == 0) { + break; + } *p++ = ' '; diff --git a/src/event/ngx_event_openssl.h b/src/event/ngx_event_openssl.h index 63cb33397..66edc523e 100644 --- a/src/event/ngx_event_openssl.h +++ b/src/event/ngx_event_openssl.h @@ -79,7 +79,7 @@ ssize_t ngx_ssl_recv_chain(ngx_connection_t *c, ngx_chain_t *cl); ngx_chain_t *ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit); ngx_int_t ngx_ssl_shutdown(ngx_connection_t *c); -void ngx_ssl_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err, +void ngx_cdecl ngx_ssl_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err, char *fmt, ...); void ngx_ssl_cleanup_ctx(void *data); diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c index 779ec1867..0c499a831 100644 --- a/src/event/ngx_event_pipe.c +++ b/src/event/ngx_event_pipe.c @@ -407,12 +407,15 @@ ngx_event_pipe_read_upstream(ngx_event_pipe_t *p) static ngx_int_t ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p) { - size_t bsize; - ngx_uint_t flush; - ngx_chain_t *out, **ll, *cl; + size_t bsize; + ngx_uint_t flush; + ngx_chain_t *out, **ll, *cl; + ngx_connection_t *downstream; + + downstream = p->downstream; ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0, - "pipe write downstream: %d", p->downstream->write->ready); + "pipe write downstream: %d", downstream->write->ready); for ( ;; ) { if (p->downstream_error) { @@ -452,6 +455,11 @@ ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p) } if (p->output_filter(p->output_ctx, p->in) == NGX_ERROR) { + + if (downstream->destroyed) { + return NGX_ABORT; + } + p->downstream_error = 1; return ngx_event_pipe_drain_chains(p); } @@ -468,9 +476,9 @@ ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p) break; } - if (p->downstream->data != p->output_ctx - || !p->downstream->write->ready - || p->downstream->write->delayed) + if (downstream->data != p->output_ctx + || !downstream->write->ready + || downstream->write->delayed) { break; } |