nginx-0.0.3-2004-04-01-10:21:13 import
diff --git a/auto/cc b/auto/cc
index 16684b0..b678651 100644
--- a/auto/cc
+++ b/auto/cc
@@ -24,6 +24,9 @@
;;
esac
+ # STUB for batch builds
+ if [ $CC = gcc27 ]; then CPU_OPT=; fi
+
CFLAGS="$CFLAGS $PIPE $CPU_OPT"
if [ ".$PCRE_OPT" = "." ]; then
diff --git a/auto/configure b/auto/configure
index 0874b63..eb32f62 100755
--- a/auto/configure
+++ b/auto/configure
@@ -36,6 +36,6 @@
. auto/unix
fi
-#have NGX_SMP . auto/have
+have NGX_SMP . auto/have
. auto/summary
diff --git a/src/core/ngx_atomic.h b/src/core/ngx_atomic.h
index 0ec5a87..5511ea7 100644
--- a/src/core/ngx_atomic.h
+++ b/src/core/ngx_atomic.h
@@ -70,10 +70,14 @@
#elif (WIN32)
-#define ngx_atomic_inc(x) InterlockedIncrement
-#define ngx_atomic_dec(x) InterlockedDecrement
+#define ngx_atomic_inc(p) InterlockedIncrement((long *) p)
+#define ngx_atomic_dec(p) InterlockedDecrement((long *) p)
+/* STUB */
+#define ngx_atomic_cmp_set(lock, old, set) 1
+#if 0
#define ngx_atomic_cmp_set(lock, old, set) \
InterlockedCompareExchange(lock, set, old)
+#endif
#else
@@ -83,7 +87,7 @@
/* STUB */
#define ngx_atomic_inc(x) (*(x))++;
#define ngx_atomic_dec(x) (*(x))--;
-#define ngx_atomic_cmp_set(lock, old, set) 1;
+#define ngx_atomic_cmp_set(lock, old, set) 1
/**/
#endif
diff --git a/src/event/modules/ngx_iocp_module.c b/src/event/modules/ngx_iocp_module.c
index cd76914..3a93825 100644
--- a/src/event/modules/ngx_iocp_module.c
+++ b/src/event/modules/ngx_iocp_module.c
@@ -14,7 +14,7 @@
static void ngx_iocp_done(ngx_cycle_t *cycle);
static ngx_int_t ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key);
static ngx_int_t ngx_iocp_del_connection(ngx_connection_t *c, u_int flags);
-static ngx_int_t ngx_iocp_process_events(ngx_log_t *log);
+static ngx_int_t ngx_iocp_process_events(ngx_cycle_t *cycle);
static void *ngx_iocp_create_conf(ngx_cycle_t *cycle);
static char *ngx_iocp_init_conf(ngx_cycle_t *cycle, void *conf);
@@ -160,7 +160,7 @@
}
-static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
+static ngx_int_t ngx_iocp_process_events(ngx_cycle_t *cycle)
{
int rc;
u_int key;
@@ -179,7 +179,7 @@
timer = INFINITE;
}
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "iocp timer: %d", timer);
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "iocp timer: %d", timer);
rc = GetQueuedCompletionStatus(iocp, &bytes, (LPDWORD) &key,
(LPOVERLAPPED *) &ovlp, timer);
@@ -193,7 +193,7 @@
ngx_gettimeofday(&tv);
ngx_time_update(tv.tv_sec);
- ngx_log_debug4(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug4(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"iocp: %d b:%d k:%d ov:" PTR_FMT, rc, bytes, key, ovlp);
delta = ngx_elapsed_msec;
@@ -202,7 +202,7 @@
if (err) {
if (ovlp == NULL) {
if (err != WAIT_TIMEOUT) {
- ngx_log_error(NGX_LOG_ALERT, log, err,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
"GetQueuedCompletionStatus() failed");
return NGX_ERROR;
@@ -216,14 +216,15 @@
if (timer != INFINITE) {
delta = ngx_elapsed_msec - delta;
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"iocp timer: %d, delta: %d", timer, (int) delta);
}
if (ovlp) {
ev = ovlp->event;
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "iocp event:" PTR_FMT, ev);
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "iocp event:" PTR_FMT, ev);
switch (key) {
@@ -244,7 +245,7 @@
ev->available = bytes;
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"iocp event handler: " PTR_FMT, ev->event_handler);
ev->event_handler(ev);
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index 7a6b539..8d37d01 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -375,8 +375,8 @@
return NGX_ERROR;
}
-#if 1
- if (ngx_accept_token == 0 && timer == 0) {
+#if 0
+ if (ngx_accept_mutex_held == 0 && timer == 0) {
/* STUB */ timer = 500;
}
#endif
@@ -416,11 +416,7 @@
if (err) {
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
cycle->log, err, "kevent() failed");
-
- if (ngx_accept_token) {
- *ngx_accept_mutex = 0;
- }
-
+ ngx_accept_mutex_unlock();
return NGX_ERROR;
}
@@ -434,21 +430,13 @@
if (events == 0) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"kevent() returned no events without timeout");
-
- if (ngx_accept_token) {
- *ngx_accept_mutex = 0;
- }
-
+ ngx_accept_mutex_unlock();
return NGX_ERROR;
}
}
if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
-
- if (ngx_accept_token) {
- *ngx_accept_mutex = 0;
- }
-
+ ngx_accept_mutex_unlock();
return NGX_ERROR;
}
@@ -532,7 +520,7 @@
#if 0
if (ngx_threaded || ngx_accept_token) {
#endif
- if (ngx_accept_token) {
+ if (ngx_accept_mutex_held) {
if (ev->accept) {
ngx_mutex_unlock(ngx_posted_events_mutex);
@@ -540,11 +528,7 @@
ev->event_handler(ev);
if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
-
- if (ngx_accept_token) {
- *ngx_accept_mutex = 0;
- }
-
+ ngx_accept_mutex_unlock();
return NGX_ERROR;
}
@@ -561,9 +545,7 @@
ngx_mutex_unlock(ngx_posted_events_mutex);
- if (ngx_accept_token) {
- *ngx_accept_mutex = 0;
- }
+ ngx_accept_mutex_unlock();
if (timer && delta) {
ngx_event_expire_timers((ngx_msec_t) delta);
diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c
index 8b675cd..7fc79ba 100644
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -13,7 +13,7 @@
static void ngx_select_done(ngx_cycle_t *cycle);
static int ngx_select_add_event(ngx_event_t *ev, int event, u_int flags);
static int ngx_select_del_event(ngx_event_t *ev, int event, u_int flags);
-static int ngx_select_process_events(ngx_log_t *log);
+static int ngx_select_process_events(ngx_cycle_t *cycle);
static char *ngx_select_init_conf(ngx_cycle_t *cycle, void *conf);
@@ -237,7 +237,7 @@
}
-static int ngx_select_process_events(ngx_log_t *log)
+static int ngx_select_process_events(ngx_cycle_t *cycle)
{
int i, ready, nready,found;
ngx_err_t err;
@@ -274,7 +274,7 @@
}
}
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"change max_fd: %d", max_fd);
}
#endif
@@ -283,12 +283,13 @@
for (i = 0; i < nevents; i++) {
ev = event_index[i];
c = ev->data;
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"select event: fd:%d wr:%d", c->fd,ev->write);
}
#endif
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "select timer: %d", timer);
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "select timer: %d", timer);
#if (WIN32)
ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp);
@@ -319,7 +320,7 @@
deltas = tv.tv_usec / 1000;
}
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"select timer: %d, delta: %d", timer, (int) delta);
} else {
@@ -328,7 +329,7 @@
ngx_time_update(tv.tv_sec);
if (ready == 0) {
- ngx_log_error(NGX_LOG_ALERT, log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"select() returned no events without timeout");
return NGX_ERROR;
}
@@ -345,12 +346,12 @@
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,
"select 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,
"select() returned no events without timeout");
return NGX_ERROR;
}
@@ -358,14 +359,15 @@
#endif /* HAVE_SELECT_CHANGE_TIMEOUT */
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "select ready %d", ready);
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "select ready %d", ready);
if (err) {
#if (WIN32)
- ngx_log_error(NGX_LOG_ALERT, log, err, "select() failed");
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, err, "select() failed");
#else
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
- log, err, "select() failed");
+ cycle->log, err, "select() failed");
#endif
return NGX_ERROR;
}
@@ -380,14 +382,14 @@
if (ev->write) {
if (FD_ISSET(c->fd, &work_write_fd_set)) {
found = 1;
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"select write %d", c->fd);
}
} else {
if (FD_ISSET(c->fd, &work_read_fd_set)) {
found = 1;
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"select read %d", c->fd);
}
}
@@ -423,7 +425,7 @@
}
if (ready != 0) {
- ngx_log_error(NGX_LOG_ALERT, log, 0, "select ready != events");
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "select ready != events");
}
if (timer && delta) {
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 049b7b7..69a08cd 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -396,8 +396,15 @@
#if (NGX_THREADS)
extern ngx_mutex_t *ngx_posted_events_mutex;
#endif
+
+extern ngx_atomic_t *ngx_accept_mutex_ptr;
extern ngx_atomic_t *ngx_accept_mutex;
-extern ngx_uint_t ngx_accept_token;
+extern ngx_uint_t ngx_accept_mutex_held;
+
+#define ngx_accept_mutex_unlock() \
+ if (ngx_accept_mutex_held) { \
+ *ngx_accept_mutex = 0; \
+ }
extern int ngx_event_flags;
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 36f2cfe..d1942d5 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -14,8 +14,9 @@
static size_t ngx_accept_log_error(void *data, char *buf, size_t len);
+ngx_atomic_t *ngx_accept_mutex_ptr;
ngx_atomic_t *ngx_accept_mutex;
-ngx_uint_t ngx_accept_token;
+ngx_uint_t ngx_accept_mutex_held;
void ngx_event_accept(ngx_event_t *ev)
@@ -311,23 +312,24 @@
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"accept mutex locked");
- if (!ngx_accept_token) {
+ if (!ngx_accept_mutex_held) {
if (ngx_enable_accept_events(cycle) == NGX_ERROR) {
+ *ngx_accept_mutex = 0;
return NGX_ERROR;
}
- ngx_accept_token = 1;
+ ngx_accept_mutex_held = 1;
}
return NGX_OK;
}
- if (ngx_accept_token) {
+ if (ngx_accept_mutex_held) {
if (ngx_disable_accept_events(cycle) == NGX_ERROR) {
return NGX_ERROR;
}
- ngx_accept_token = 0;
+ ngx_accept_mutex_held = 0;
}
return NGX_OK;
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index f2d392a..090733a 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -65,10 +65,11 @@
signo = 0;
live = 0;
- ngx_accept_mutex = mmap(NULL, sizeof(ngx_atomic_t), PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_SHARED, -1, 0);
+ ngx_accept_mutex_ptr = mmap(NULL, sizeof(ngx_atomic_t),
+ PROT_READ|PROT_WRITE,
+ MAP_ANON|MAP_SHARED, -1, 0);
- if (ngx_accept_mutex == NULL) {
+ if (ngx_accept_mutex_ptr == NULL) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
"mmap(MAP_ANON|MAP_SHARED) failed");
/* fatal */
@@ -375,12 +376,13 @@
ngx_process = NGX_PROCESS_WORKER;
ngx_last_process = 0;
- if (ngx_accept_mutex) {
- ngx_accept_token = 1;
- }
-
ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
+ if (ccf->worker_processes > 1) {
+ ngx_accept_mutex = ngx_accept_mutex_ptr;
+ ngx_accept_mutex_held = 1;
+ }
+
if (ccf->group != (gid_t) NGX_CONF_UNSET) {
if (setuid(ccf->group) == -1) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
@@ -483,6 +485,8 @@
ngx_close_listening_sockets(cycle);
+ ngx_accept_mutex = NULL;
+
for ( ;; ) {
if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) {
ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting");
diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c
index 9291710..1b8f186 100644
--- a/src/os/win32/ngx_process_cycle.c
+++ b/src/os/win32/ngx_process_cycle.c
@@ -48,6 +48,6 @@
for ( ;; ) {
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
- ngx_process_events(cycle->log);
+ ngx_process_events(cycle);
}
}
diff --git a/src/os/win32/ngx_win32_config.h b/src/os/win32/ngx_win32_config.h
index cab3321..cc3a068 100644
--- a/src/os/win32/ngx_win32_config.h
+++ b/src/os/win32/ngx_win32_config.h
@@ -31,6 +31,7 @@
/* disable some "-W4" level warnings */
#pragma warning(disable:4054)
+#pragma warning(disable:4054)
#pragma warning(disable:4055)
/* unreferenced formal parameter */
#pragma warning(disable:4100)
@@ -43,6 +44,8 @@
#ifdef __WATCOMC__
+/* unreachable code */
+#pragma disable_message(201)
/* disable "Symbol 'ngx_rbtree_min' has been defined, but not referenced" */
#pragma disable_message(202)
#endif
@@ -86,6 +89,7 @@
typedef __int64 off_t;
typedef uint32_t in_addr_t;
typedef int sig_atomic_t;
+typedef uint32_t ngx_atomic_t;
#define OFF_T_FMT "%I64d"