nginx-0.0.3-2004-04-02-19:13:20 import
diff --git a/src/event/modules/ngx_aio_module.c b/src/event/modules/ngx_aio_module.c
index 24516a4..f04ba8d 100644
--- a/src/event/modules/ngx_aio_module.c
+++ b/src/event/modules/ngx_aio_module.c
@@ -14,7 +14,7 @@
static int ngx_aio_add_event(ngx_event_t *ev, int event, u_int flags);
static int ngx_aio_del_event(ngx_event_t *ev, int event, u_int flags);
static int ngx_aio_del_connection(ngx_connection_t *c, u_int flags);
-static int ngx_aio_process_events(ngx_log_t *log);
+static int ngx_aio_process_events(ngx_cycle_t *cycle);
ngx_os_io_t ngx_os_aio = {
@@ -53,7 +53,7 @@
NULL, /* module directives */
NGX_EVENT_MODULE, /* module type */
NULL, /* init module */
- NULL /* init child */
+ NULL /* init process */
};
@@ -137,9 +137,9 @@
}
-static int ngx_aio_process_events(ngx_log_t *log)
+static int ngx_aio_process_events(ngx_cycle_t *cycle)
{
- return ngx_kqueue_module_ctx.actions.process(log);
+ return ngx_kqueue_module_ctx.actions.process(cycle);
}
#endif /* HAVE_KQUEUE */
diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c
index e8204cd..41188ae 100644
--- a/src/event/modules/ngx_devpoll_module.c
+++ b/src/event/modules/ngx_devpoll_module.c
@@ -36,7 +36,7 @@
static int ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags);
static int ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags);
static int ngx_devpoll_set_event(ngx_event_t *ev, int event, u_int flags);
-static int ngx_devpoll_process_events(ngx_log_t *log);
+static int ngx_devpoll_process_events(ngx_cycle_t *cycle);
static void *ngx_devpoll_create_conf(ngx_cycle_t *cycle);
static char *ngx_devpoll_init_conf(ngx_cycle_t *cycle, void *conf);
@@ -308,13 +308,15 @@
}
-int ngx_devpoll_process_events(ngx_log_t *log)
+int ngx_devpoll_process_events(ngx_cycle_t *cycle)
{
- int events, i, j;
+ int events;
+ ngx_int_t i;
+ ngx_uint_t j;
size_t n;
ngx_msec_t timer;
ngx_err_t err;
- ngx_cycle_t **cycle;
+ ngx_cycle_t **old_cycle;
ngx_connection_t *c;
ngx_epoch_msec_t delta;
struct dvpoll dvp;
@@ -327,12 +329,13 @@
timer = (ngx_msec_t) INFTIM;
}
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "devpoll timer: %d", timer);
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "devpoll timer: %d", timer);
if (nchanges) {
n = nchanges * sizeof(struct pollfd);
if (write(dp, change_list, n) != (ssize_t) n) {
- ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"write(/dev/poll) failed");
return NGX_ERROR;
}
@@ -359,18 +362,18 @@
if (err) {
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
- log, err, "ioctl(DP_POLL) failed");
+ cycle->log, err, "ioctl(DP_POLL) failed");
return NGX_ERROR;
}
if (timer != (ngx_msec_t) INFTIM) {
delta = ngx_elapsed_msec - delta;
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"devpoll timer: %d, delta: %d", timer, (int) delta);
} else {
if (events == 0) {
- ngx_log_error(NGX_LOG_ALERT, log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"ioctl(DP_POLL) returned no events without timeout");
return NGX_ERROR;
}
@@ -380,12 +383,12 @@
c = &ngx_cycle->connections[event_list[i].fd];
if (c->fd == -1) {
- cycle = ngx_old_cycles.elts;
+ old_cycle = ngx_old_cycles.elts;
for (j = 0; j < ngx_old_cycles.nelts; j++) {
- if (cycle[i] == NULL) {
+ if (old_cycle[j] == NULL) {
continue;
}
- c = &cycle[j]->connections[event_list[i].fd];
+ c = &old_cycle[j]->connections[event_list[i].fd];
if (c->fd != -1) {
break;
}
@@ -393,17 +396,17 @@
}
if (c->fd == -1) {
- ngx_log_error(NGX_LOG_EMERG, log, 0, "unknown cycle");
+ ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, "unknown cycle");
exit(1);
}
- ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"devpoll: fd:%d, ev:%04X, rev:%04X",
event_list[i].fd,
event_list[i].events, event_list[i].revents);
if (event_list[i].revents & (POLLERR|POLLHUP|POLLNVAL)) {
- ngx_log_error(NGX_LOG_ALERT, log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"ioctl(DP_POLL) error fd:%d ev:%04X rev:%04X",
event_list[i].fd,
event_list[i].events, event_list[i].revents);
@@ -411,7 +414,7 @@
if (event_list[i].revents & ~(POLLIN|POLLOUT|POLLERR|POLLHUP|POLLNVAL))
{
- ngx_log_error(NGX_LOG_ALERT, log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"strange ioctl(DP_POLL) events "
"fd:%d ev:%04X rev:%04X",
event_list[i].fd,
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index 0b2b7d2..3f534ff 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -76,7 +76,7 @@
static int ngx_epoll_del_event(ngx_event_t *ev, int event, u_int flags);
static int ngx_epoll_add_connection(ngx_connection_t *c);
static int ngx_epoll_del_connection(ngx_connection_t *c);
-static int ngx_epoll_process_events(ngx_log_t *log);
+static int ngx_epoll_process_events(ngx_cycle_t *cycle);
static void *ngx_epoll_create_conf(ngx_cycle_t *cycle);
static char *ngx_epoll_init_conf(ngx_cycle_t *cycle, void *conf);
@@ -337,14 +337,13 @@
#endif
-int ngx_epoll_process_events(ngx_log_t *log)
+int ngx_epoll_process_events(ngx_cycle_t *cycle)
{
int events;
ngx_int_t instance, i;
size_t n;
ngx_msec_t timer;
ngx_err_t err;
- ngx_cycle_t **cycle;
struct timeval tv;
ngx_connection_t *c;
ngx_epoch_msec_t delta;
@@ -357,7 +356,8 @@
timer = (ngx_msec_t) -1;
}
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "epoll timer: %d", timer);
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "epoll timer: %d", timer);
events = epoll_wait(ep, event_list, nevents, timer);
@@ -376,11 +376,11 @@
if (timer != (ngx_msec_t) -1) {
delta = ngx_elapsed_msec - delta;
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"epoll timer: %d, delta: %d", timer, (int) delta);
} else {
if (events == 0) {
- ngx_log_error(NGX_LOG_ALERT, log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"epoll_wait() returned no events without timeout");
return NGX_ERROR;
}
@@ -388,7 +388,7 @@
if (err) {
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
- log, err, "epoll_wait() failed");
+ cycle->log, err, "epoll_wait() failed");
return NGX_ERROR;
}
@@ -398,7 +398,15 @@
instance = (uintptr_t) c & 1;
c = (ngx_connection_t *) ((uintptr_t) c & (uintptr_t) ~1);
- ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0,
+ if (event_list[i].events & EPOLLIN) {
+ c->read->returned_instance = instance;
+ }
+
+ if (event_list[i].events & EPOLLOUT) {
+ c->write->returned_instance = instance;
+ }
+
+ ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"epoll: fd:%d ev:%04X d:" PTR_FMT,
c->fd, event_list[i].events, event_list[i].data);
@@ -409,19 +417,19 @@
* that was just closed in this iteration
*/
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"epoll: stale event " PTR_FMT, c);
continue;
}
if (event_list[i].events & (EPOLLERR|EPOLLHUP)) {
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"epoll_wait() error on fd:%d ev:%04X",
c->fd, event_list[i].events);
}
if (event_list[i].events & ~(EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP)) {
- ngx_log_error(NGX_LOG_ALERT, log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"strange epoll_wait() events fd:%d ev:%04X",
c->fd, event_list[i].events);
}
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index 9f0cd18..7c39d80 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -346,7 +346,8 @@
static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
{
int events;
- ngx_int_t i, instance;
+ ngx_int_t i;
+ ngx_uint_t instance;
ngx_err_t err;
ngx_msec_t timer;
ngx_event_t *ev;
@@ -517,10 +518,7 @@
}
-#if 0
- if (ngx_threaded || ngx_accept_token) {
-#endif
- if (ngx_accept_mutex_held) {
+ if (ngx_threaded || ngx_accept_mutex_held) {
if (ev->accept) {
ngx_mutex_unlock(ngx_posted_events_mutex);
@@ -533,7 +531,7 @@
}
} else {
- ev->next = ngx_posted_events;
+ ev->next = (ngx_event_t *) ngx_posted_events;
ngx_posted_events = ev;
}
@@ -551,11 +549,9 @@
ngx_event_expire_timers((ngx_msec_t) delta);
}
-#if (NGX_THREADS)
if (ngx_threaded) {
return NGX_OK;
}
-#endif
for ( ;; ) {
@@ -598,11 +594,6 @@
static void ngx_kqueue_thread_handler(ngx_event_t *ev)
{
- ngx_int_t instance;
-
- instance = (uintptr_t) ev & 1;
- ev = (ngx_event_t *) ((uintptr_t) ev & (uintptr_t) ~1);
-
if ((!ev->posted && !ev->active)
|| ev->instance != ev->returned_instance)
{
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index c8ea197..7b86ae5 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -13,7 +13,7 @@
static void ngx_poll_done(ngx_cycle_t *cycle);
static int ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags);
static int ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags);
-int ngx_poll_process_events(ngx_log_t *log);
+int ngx_poll_process_events(ngx_cycle_t *cycle);
static struct pollfd *event_list;
@@ -49,7 +49,7 @@
NULL, /* module directives */
NGX_EVENT_MODULE, /* module type */
NULL, /* init module */
- NULL /* init child */
+ NULL /* init process */
};
@@ -161,7 +161,7 @@
static int ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags)
{
- ngx_int_t i;
+ ngx_uint_t i;
ngx_cycle_t **cycle;
ngx_event_t *e;
ngx_connection_t *c;
@@ -245,13 +245,14 @@
}
-int ngx_poll_process_events(ngx_log_t *log)
+int ngx_poll_process_events(ngx_cycle_t *cycle)
{
int ready;
- ngx_int_t i, j, nready, found;
+ ngx_int_t i, nready;
+ ngx_uint_t n, found;
ngx_msec_t timer;
ngx_err_t err;
- ngx_cycle_t **cycle;
+ ngx_cycle_t **old_cycle;
ngx_event_t *ev;
ngx_epoch_msec_t delta;
ngx_connection_t *c;
@@ -272,11 +273,12 @@
#if (NGX_DEBUG0)
for (i = 0; i < nevents; i++) {
- ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, "poll: %d: fd:%d ev:%04X",
+ ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "poll: %d: fd:%d ev:%04X",
i, event_list[i].fd, event_list[i].events);
}
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "poll timer: %d", timer);
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "poll timer: %d", timer);
#endif
ready = poll(event_list, (u_int) nevents, (int) timer);
@@ -293,23 +295,23 @@
delta = ngx_elapsed_msec;
ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"poll ready %d of %d", ready, nevents);
if (err) {
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
- log, err, "poll() failed");
+ cycle->log, err, "poll() failed");
return NGX_ERROR;
}
if (timer != (ngx_msec_t) INFTIM) {
delta = ngx_elapsed_msec - delta;
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"poll timer: %d, delta: %d", timer, (int) delta);
} else {
if (ready == 0) {
- ngx_log_error(NGX_LOG_ALERT, log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"poll() returned no events without timeout");
return NGX_ERROR;
}
@@ -325,13 +327,13 @@
for (i = 0; i < nevents && ready; i++) {
#if 0
- ngx_log_debug4(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug4(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"poll: %d: fd:%d ev:%04X rev:%04X",
i, event_list[i].fd,
event_list[i].events, event_list[i].revents);
#else
if (event_list[i].revents) {
- ngx_log_debug4(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug4(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"poll: %d: fd:%d ev:%04X rev:%04X",
i, event_list[i].fd,
event_list[i].events, event_list[i].revents);
@@ -339,7 +341,7 @@
#endif
if (event_list[i].revents & (POLLERR|POLLHUP|POLLNVAL)) {
- ngx_log_error(NGX_LOG_ALERT, log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"poll() error fd:%d ev:%04X rev:%04X",
event_list[i].fd,
event_list[i].events, event_list[i].revents);
@@ -347,7 +349,7 @@
if (event_list[i].revents & ~(POLLIN|POLLOUT|POLLERR|POLLHUP|POLLNVAL))
{
- ngx_log_error(NGX_LOG_ALERT, log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"strange poll() events fd:%d ev:%04X rev:%04X",
event_list[i].fd,
event_list[i].events, event_list[i].revents);
@@ -363,12 +365,12 @@
c = &ngx_cycle->connections[event_list[i].fd];
if (c->fd == -1) {
- cycle = ngx_old_cycles.elts;
- for (j = 0; j < ngx_old_cycles.nelts; j++) {
- if (cycle[j] == NULL) {
+ old_cycle = ngx_old_cycles.elts;
+ for (n = 0; n < ngx_old_cycles.nelts; n++) {
+ if (old_cycle[n] == NULL) {
continue;
}
- c = &cycle[j]->connections[event_list[i].fd];
+ c = &old_cycle[n]->connections[event_list[i].fd];
if (c->fd != -1) {
break;
}
@@ -376,7 +378,7 @@
}
if (c->fd == -1) {
- ngx_log_error(NGX_LOG_ALERT, log, 0, "unexpected event");
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "unexpected event");
/*
* it is certainly our fault and it should be investigated,
@@ -435,7 +437,7 @@
}
if (ready != 0) {
- ngx_log_error(NGX_LOG_ALERT, log, 0, "poll ready != events");
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "poll ready != events");
}
if (timer != (ngx_msec_t) INFTIM && delta) {
diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c
index 99b2555..5686b6e 100644
--- a/src/event/modules/ngx_rtsig_module.c
+++ b/src/event/modules/ngx_rtsig_module.c
@@ -39,8 +39,8 @@
static void ngx_rtsig_done(ngx_cycle_t *cycle);
static int ngx_rtsig_add_connection(ngx_connection_t *c);
static int ngx_rtsig_del_connection(ngx_connection_t *c, u_int flags);
-static int ngx_rtsig_process_events(ngx_log_t *log);
-static int ngx_rtsig_process_overflow(ngx_log_t *log);
+static int ngx_rtsig_process_events(ngx_cycle_t *cycle);
+static int ngx_rtsig_process_overflow(ngx_cycle_t *cycle);
static void *ngx_rtsig_create_conf(ngx_cycle_t *cycle);
static char *ngx_rtsig_init_conf(ngx_cycle_t *cycle, void *conf);
@@ -188,14 +188,13 @@
}
-int ngx_rtsig_process_events(ngx_log_t *log)
+int ngx_rtsig_process_events(ngx_cycle_t *cycle)
{
int signo;
ngx_int_t instance, i;
size_t n;
ngx_msec_t timer;
ngx_err_t err;
- ngx_cycle_t **cycle;
siginfo_t si;
struct timeval tv;
struct timespec ts, *tp;
@@ -216,7 +215,8 @@
tp = NULL;
}
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "rtsig timer: %d", timer);
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "rtsig timer: %d", timer);
/* Linux sigwaitinfo() is sigtimedwait() with the NULL timeout pointer */
@@ -236,18 +236,18 @@
if (err) {
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
- log, err, "sigtimedwait() failed");
+ cycle->log, err, "sigtimedwait() failed");
return NGX_ERROR;
}
if (timer) {
delta = ngx_elapsed_msec - delta;
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"rtsig timer: %d, delta: %d", timer, (int) delta);
}
- ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"signo:%d fd:%d band:%X", signo, si.si_fd, si.si_band);
rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
@@ -255,6 +255,7 @@
if (signo == rtscf->signo) {
/* TODO: old_cycles */
+
c = &ngx_cycle->connections[si.si_fd];
/* TODO: stale signals */
@@ -274,7 +275,7 @@
}
} else if (signo == SIGIO) {
- ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"signal queue overflowed: "
"SIGIO, fd:%d, band:%X", si.si_fd, si.si_band);
@@ -284,7 +285,7 @@
sa.sa_handler = SIG_DFL;
sigemptyset(&sa.sa_mask);
if (sigaction(rtscf->signo, &sa, NULL) == -1) {
- ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"sigaction(%d, SIG_DFL) failed", rtscf->signo);
}
@@ -297,7 +298,7 @@
} else {
- ngx_log_error(NGX_LOG_ALERT, log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"sigtimedwait() returned unexpected signal: %d", signo);
return NGX_ERROR;
}
@@ -310,9 +311,9 @@
}
-static int ngx_rtsig_process_overflow(ngx_log_t *log)
+static int ngx_rtsig_process_overflow(ngx_cycle_t *cycle)
{
- if (ngx_poll_module_ctx.actions.process(log) == NGX_OK) {
+ if (ngx_poll_module_ctx.actions.process(cycle) == NGX_OK) {
ngx_event_actions = ngx_rtsig_module_ctx.actions;
ngx_event_flags = NGX_USE_SIGIO_EVENT;
}
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 7bfda04..9c84114 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -155,9 +155,9 @@
return NGX_OK;
}
- ngx_accept_mutex_ptr = mmap(NULL, sizeof(ngx_atomic_t),
- PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_SHARED, -1, 0);
+ ngx_accept_mutex_ptr = (ngx_atomic_t *) mmap(NULL, sizeof(ngx_atomic_t),
+ PROT_READ|PROT_WRITE,
+ MAP_ANON|MAP_SHARED, -1, 0);
if (ngx_accept_mutex_ptr == NULL) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.c b/src/http/modules/proxy/ngx_http_proxy_handler.c
index 95d5654..cb29559 100644
--- a/src/http/modules/proxy/ngx_http_proxy_handler.c
+++ b/src/http/modules/proxy/ngx_http_proxy_handler.c
@@ -381,6 +381,9 @@
p = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
#if (HAVE_KQUEUE)
+
+ /* TODO: KEVENT_EVENT */
+
if (ev->kq_eof) {
ev->eof = 1;
@@ -405,6 +408,44 @@
ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST);
}
}
+
+#else
+
+ n = recv(c->fd, buf, 1, MSG_PEEK);
+
+ if (n > 0) {
+ /* TODO: delete level */
+ return;
+ }
+
+ if (n == -1) {
+ err = ngx_socket_errno;
+ if (err == NGX_EAGAIN) {
+ return;
+ }
+
+ ev->error = 1;
+
+ } else if (n == 0) {
+ err = 0;
+ ev->eof = 1;
+ }
+
+ if (!p->cachable && p->upstream->peer.connection) {
+ ngx_log_error(NGX_LOG_INFO, ev->log, err,
+ "client have closed prematurely connection, "
+ "so upstream connection is closed too");
+ ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST);
+ return;
+ }
+
+ ngx_log_error(NGX_LOG_INFO, ev->log, ev->err,
+ "client have closed prematurely connection");
+
+ if (p->upstream == NULL || p->upstream->peer.connection == NULL) {
+ ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST);
+ }
+
#endif
}
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 6b2a443..a2a0fed 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -97,7 +97,7 @@
return;
}
- rev->next = ngx_posted_events;
+ rev->next = (ngx_event_t *) ngx_posted_events;
ngx_posted_events = rev;
ngx_mutex_unlock(ngx_posted_events_mutex);
diff --git a/src/os/unix/ngx_errno.c b/src/os/unix/ngx_errno.c
index 410cfde..3b12528 100644
--- a/src/os/unix/ngx_errno.c
+++ b/src/os/unix/ngx_errno.c
@@ -43,7 +43,7 @@
str = strerror_r(err, errstr, size);
if (str != errstr) {
- return ngx_cpystrn(errstr, str, size) - errstr;
+ return ngx_cpystrn(errstr, str, size) - (u_char *) errstr;
}
for (len = 0; len < size; len++) {
diff --git a/src/os/unix/ngx_freebsd_rfork_thread.c b/src/os/unix/ngx_freebsd_rfork_thread.c
index e100b93..1cdfee4 100644
--- a/src/os/unix/ngx_freebsd_rfork_thread.c
+++ b/src/os/unix/ngx_freebsd_rfork_thread.c
@@ -26,7 +26,6 @@
*/
-ngx_int_t ngx_threaded;
char *ngx_freebsd_kern_usrstack;
size_t ngx_thread_stack_size;
diff --git a/src/os/unix/ngx_linux_config.h b/src/os/unix/ngx_linux_config.h
index 23745df..d36d665 100644
--- a/src/os/unix/ngx_linux_config.h
+++ b/src/os/unix/ngx_linux_config.h
@@ -27,6 +27,7 @@
#include <sys/resource.h>
#include <sys/sysctl.h>
#include <sys/wait.h>
+#include <sys/mman.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h> /* TCP_CORK */
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index 1ae4dee..2410671 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -15,6 +15,7 @@
ngx_pid_t ngx_pid;
ngx_pid_t ngx_new_binary;
ngx_int_t ngx_inherited;
+ngx_int_t ngx_threaded;
sig_atomic_t ngx_reap;
sig_atomic_t ngx_timer;
diff --git a/src/os/unix/ngx_process_cycle.h b/src/os/unix/ngx_process_cycle.h
index 0c55afa..364094a 100644
--- a/src/os/unix/ngx_process_cycle.h
+++ b/src/os/unix/ngx_process_cycle.h
@@ -26,6 +26,7 @@
extern ngx_pid_t ngx_pid;
extern ngx_pid_t ngx_new_binary;
extern ngx_int_t ngx_inherited;
+extern ngx_int_t ngx_threaded;
extern sig_atomic_t ngx_reap;
extern sig_atomic_t ngx_timer;
diff --git a/src/os/unix/ngx_readv_chain.c b/src/os/unix/ngx_readv_chain.c
index 3ec3b27..49bb3ef 100644
--- a/src/os/unix/ngx_readv_chain.c
+++ b/src/os/unix/ngx_readv_chain.c
@@ -135,7 +135,7 @@
ssize_t ngx_readv_chain(ngx_connection_t *c, ngx_chain_t *chain)
{
- char *prev;
+ u_char *prev;
ssize_t n, size;
struct iovec *iov;
ngx_err_t err;
diff --git a/src/os/unix/ngx_recv.c b/src/os/unix/ngx_recv.c
index 37e70c6..6345350 100644
--- a/src/os/unix/ngx_recv.c
+++ b/src/os/unix/ngx_recv.c
@@ -112,7 +112,7 @@
#else /* ! NAVE_KQUEUE */
-ssize_t ngx_unix_recv(ngx_connection_t *c, char *buf, size_t size)
+ssize_t ngx_unix_recv(ngx_connection_t *c, u_char *buf, size_t size)
{
ssize_t n;
ngx_err_t err;
diff --git a/src/os/unix/ngx_solaris_config.h b/src/os/unix/ngx_solaris_config.h
index db74aeb..7c02c44 100644
--- a/src/os/unix/ngx_solaris_config.h
+++ b/src/os/unix/ngx_solaris_config.h
@@ -22,10 +22,11 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
-#include <sys/filio.h> /* FIONBIO */
-#include <sys/stropts.h> /* INFTIM */
+#include <sys/mman.h>
#include <sys/socket.h>
#include <sys/sendfile.h>
+#include <sys/filio.h> /* FIONBIO */
+#include <sys/stropts.h> /* INFTIM */
#include <sys/systeminfo.h>
#include <netinet/in.h>
#include <arpa/inet.h>
diff --git a/src/os/unix/ngx_thread.h b/src/os/unix/ngx_thread.h
index 841636a..5225274 100644
--- a/src/os/unix/ngx_thread.h
+++ b/src/os/unix/ngx_thread.h
@@ -102,9 +102,6 @@
ngx_int_t ngx_mutex_unlock(ngx_mutex_t *m);
-extern ngx_int_t ngx_threaded;
-
-
#else /* !NGX_THREADS */
#define ngx_thread_volatile
diff --git a/src/os/unix/ngx_time.c b/src/os/unix/ngx_time.c
index 3703991..221b64c 100644
--- a/src/os/unix/ngx_time.c
+++ b/src/os/unix/ngx_time.c
@@ -20,72 +20,3 @@
tm->ngx_tm_mon++;
tm->ngx_tm_year += 1900;
}
-
-
-
-#if 0
-
-typedef struct {
- int busy;
- u_int_64 msec;
- time_t sec;
- tm;
- http_time_len;
- http_time[n];
-};
-
-volatile *ngx_time_p;
-
-ngx_time()
-{
- p = ngx_time_p;
-}
-
-ngx_update_time()
-{
- u_int64 msec;
- struct timeval tv;
-
- gettimeofday(&tv, NULL);
-
- msec = (unsigned long) tv.tv_sec * 1000 + tv.tv_usec / 1000;
- p = ngx_time_p;
-
- /* minimum can be for example 0, 10, 50 or 100 ms */
- if (tv_sec > p->sec || msec - p->msec >= minimum) {
- old_p = p;
- /* max_tries < max_slots - 10,
- max_slots should be more than max of threads */
- for (/* void */; i < max_tries; i++) {
- if (++p >= last_slot)
- p = first_slot;
-
- if (!test_and_set(p->busy)
- break;
- }
-
- if (i == max_tries) {
- ngx_log_error();
- return;
- }
-
- if (tv_sec > p->sec) {
- p->sec = tv.tv.sec;
- p->msec = msec;
- localtime_r(&tv.tv_sec, tm);
- make http stirng;
-
- } else {
- ngx_memcpy(p->sec, old_p->sec, sizeof() - offset_of(, sec));
- p->msec = msec;
- }
-
- /* here can be too seldom and non-critical race condition */
- if (ngx_time_p == old_p)
- ngx_time_p = p;
-
- unlock(p->busy);
- }
-}
-
-#endif
diff --git a/src/os/win32/ngx_process_cycle.h b/src/os/win32/ngx_process_cycle.h
index 0c55afa..364094a 100644
--- a/src/os/win32/ngx_process_cycle.h
+++ b/src/os/win32/ngx_process_cycle.h
@@ -26,6 +26,7 @@
extern ngx_pid_t ngx_pid;
extern ngx_pid_t ngx_new_binary;
extern ngx_int_t ngx_inherited;
+extern ngx_int_t ngx_threaded;
extern sig_atomic_t ngx_reap;
extern sig_atomic_t ngx_timer;