Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src/event
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2005-12-05 16:18:09 +0300
committerIgor Sysoev <igor@sysoev.ru>2005-12-05 16:18:09 +0300
commitd3283ff9224a41a1a24c2d89f671811c0747480a (patch)
treee122c436f72f587622e8ec0e75632434045e330d /src/event
parent0624ed3d7eaa1995d9e5ec4292bd1eccda09cafc (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.c26
-rw-r--r--src/event/ngx_event_connect.c5
-rw-r--r--src/event/ngx_event_openssl.c21
-rw-r--r--src/event/ngx_event_openssl.h2
-rw-r--r--src/event/ngx_event_pipe.c22
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;
}