]> git.kaiwu.me - nginx.git/commitdiff
nginx-0.0.3-2004-04-01-10:21:13 import
authorIgor Sysoev <igor@sysoev.ru>
Thu, 1 Apr 2004 06:21:13 +0000 (06:21 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Thu, 1 Apr 2004 06:21:13 +0000 (06:21 +0000)
auto/cc
auto/configure
src/core/ngx_atomic.h
src/event/modules/ngx_iocp_module.c
src/event/modules/ngx_kqueue_module.c
src/event/modules/ngx_select_module.c
src/event/ngx_event.h
src/event/ngx_event_accept.c
src/os/unix/ngx_process_cycle.c
src/os/win32/ngx_process_cycle.c
src/os/win32/ngx_win32_config.h

diff --git a/auto/cc b/auto/cc
index 16684b0c86cbb0d59558b451648748071a611d65..b678651920f709e89e2c70b77af660abdfdad65c 100644 (file)
--- a/auto/cc
+++ b/auto/cc
@@ -24,6 +24,9 @@ case $CC in
              ;;
          esac
 
+         # STUB for batch builds
+         if [ $CC = gcc27 ]; then CPU_OPT=; fi
+
          CFLAGS="$CFLAGS $PIPE $CPU_OPT"
 
          if [ ".$PCRE_OPT" = "." ]; then
index 0874b63a2ba336bcaf2cc13f62424b9514539f88..eb32f623e9df21b5489e62667d36d894f9a8d500 100755 (executable)
@@ -36,6 +36,6 @@ if [ "$PLATFORM" != win32 ]; then
     . auto/unix
 fi
 
-#have NGX_SMP . auto/have
+have NGX_SMP . auto/have
 
 . auto/summary
index 0ec5a8722e64709fce53dfd4400afec660d7b8ab..5511ea76591a5bc680c47c431bf66bb780f69966 100644 (file)
@@ -70,10 +70,14 @@ static ngx_inline uint32_t ngx_atomic_cmp_set(ngx_atomic_t *lock,
 
 #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 @@ typedef volatile uint32_t  ngx_atomic_t;
 /* 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
index cd769141d10f0e1c6c461bb986af6323c3a7cf33..3a93825e8550b9012663cce68105e27fca376d2f 100644 (file)
@@ -14,7 +14,7 @@ static ngx_int_t ngx_iocp_init(ngx_cycle_t *cycle);
 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_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)
 {
     int                rc;
     u_int              key;
@@ -179,7 +179,7 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
         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 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
     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 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
     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 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
     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 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
 
         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);
index 7a6b5396fad1fa17ed46212c86d0e7ebf5975ee7..8d37d01871119f6b644609537e1b635baec1cfe1 100644 (file)
@@ -375,8 +375,8 @@ static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
             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 @@ static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
     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 @@ static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
         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 @@ static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
 #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 @@ static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
                 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 @@ static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
 
     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);
index 8b675cd08a2c715e89ac2019e6306492608ba8d5..7fc79ba942c83aa1a2466bed2ebb36f032e5d3ae 100644 (file)
@@ -13,7 +13,7 @@ static int ngx_select_init(ngx_cycle_t *cycle);
 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_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)
 {
     int                i, ready, nready,found;
     ngx_err_t          err;
@@ -274,7 +274,7 @@ static int ngx_select_process_events(ngx_log_t *log)
             }
         }
 
-        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 @@ static int ngx_select_process_events(ngx_log_t *log)
     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 @@ static int ngx_select_process_events(ngx_log_t *log)
             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 @@ static int ngx_select_process_events(ngx_log_t *log)
         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 @@ static int ngx_select_process_events(ngx_log_t *log)
     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 @@ static int ngx_select_process_events(ngx_log_t *log)
 
 #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 @@ static int ngx_select_process_events(ngx_log_t *log)
         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 @@ static int ngx_select_process_events(ngx_log_t *log)
     }
 
     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) {
index 049b7b7d59036c04751f826a63077cf7b63aa302..69a08cd8ad7489b9359cbae86236d496409915e3 100644 (file)
@@ -396,8 +396,15 @@ extern ngx_thread_volatile ngx_event_t  *ngx_posted_events;
 #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;
index 36f2cfe388e62ef7d886304c9fa3414328d8fe63..d1942d581e31a8030802c23e52fb6fa665131889 100644 (file)
@@ -14,8 +14,9 @@ typedef struct {
 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_int_t ngx_trylock_accept_mutex(ngx_cycle_t *cycle)
         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;
index f2d392a913c4f1ec44b6274a0802ebfbbab2b928..090733adb9de63170a7d74a880d5a930b79c3103 100644 (file)
@@ -65,10 +65,11 @@ void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
     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 @@ static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)
     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 @@ static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)
 
     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");
index 9291710558eb65d6a956e111d9d6fcf226fcc427..1b8f18629ea8cd3c9347a016a53890049c52fb29 100644 (file)
@@ -48,6 +48,6 @@ void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
     for ( ;; ) {
         ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
 
-        ngx_process_events(cycle->log);
+        ngx_process_events(cycle);
     }
 }
index cab3321e58485518044fd6d855e14bf5c77340d3..cc3a06842d25328857ee6f90b4635fba266cae33 100644 (file)
@@ -30,6 +30,7 @@
 
 /* disable some "-W4" level warnings */
 
+#pragma warning(disable:4054)
 #pragma warning(disable:4054)
 #pragma warning(disable:4055)
 /* unreferenced formal parameter */
@@ -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 long              time_t;
 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"