mirror of
https://github.com/nginx/nginx.git
synced 2025-06-07 17:52:38 +08:00
nginx-0.0.3-2004-04-01-10:21:13 import
This commit is contained in:
parent
709405b755
commit
205dc145c5
3
auto/cc
3
auto/cc
@ -24,6 +24,9 @@ case $CC in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# STUB for batch builds
|
||||||
|
if [ $CC = gcc27 ]; then CPU_OPT=; fi
|
||||||
|
|
||||||
CFLAGS="$CFLAGS $PIPE $CPU_OPT"
|
CFLAGS="$CFLAGS $PIPE $CPU_OPT"
|
||||||
|
|
||||||
if [ ".$PCRE_OPT" = "." ]; then
|
if [ ".$PCRE_OPT" = "." ]; then
|
||||||
|
2
auto/configure
vendored
2
auto/configure
vendored
@ -36,6 +36,6 @@ if [ "$PLATFORM" != win32 ]; then
|
|||||||
. auto/unix
|
. auto/unix
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#have NGX_SMP . auto/have
|
have NGX_SMP . auto/have
|
||||||
|
|
||||||
. auto/summary
|
. auto/summary
|
||||||
|
@ -70,10 +70,14 @@ static ngx_inline uint32_t ngx_atomic_cmp_set(ngx_atomic_t *lock,
|
|||||||
|
|
||||||
#elif (WIN32)
|
#elif (WIN32)
|
||||||
|
|
||||||
#define ngx_atomic_inc(x) InterlockedIncrement
|
#define ngx_atomic_inc(p) InterlockedIncrement((long *) p)
|
||||||
#define ngx_atomic_dec(x) InterlockedDecrement
|
#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) \
|
#define ngx_atomic_cmp_set(lock, old, set) \
|
||||||
InterlockedCompareExchange(lock, set, old)
|
InterlockedCompareExchange(lock, set, old)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@ -83,7 +87,7 @@ typedef volatile uint32_t ngx_atomic_t;
|
|||||||
/* STUB */
|
/* STUB */
|
||||||
#define ngx_atomic_inc(x) (*(x))++;
|
#define ngx_atomic_inc(x) (*(x))++;
|
||||||
#define ngx_atomic_dec(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
|
#endif
|
||||||
|
@ -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 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_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_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 void *ngx_iocp_create_conf(ngx_cycle_t *cycle);
|
||||||
static char *ngx_iocp_init_conf(ngx_cycle_t *cycle, void *conf);
|
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;
|
int rc;
|
||||||
u_int key;
|
u_int key;
|
||||||
@ -179,7 +179,7 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
|
|||||||
timer = INFINITE;
|
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,
|
rc = GetQueuedCompletionStatus(iocp, &bytes, (LPDWORD) &key,
|
||||||
(LPOVERLAPPED *) &ovlp, timer);
|
(LPOVERLAPPED *) &ovlp, timer);
|
||||||
@ -193,7 +193,7 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
|
|||||||
ngx_gettimeofday(&tv);
|
ngx_gettimeofday(&tv);
|
||||||
ngx_time_update(tv.tv_sec);
|
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);
|
"iocp: %d b:%d k:%d ov:" PTR_FMT, rc, bytes, key, ovlp);
|
||||||
|
|
||||||
delta = ngx_elapsed_msec;
|
delta = ngx_elapsed_msec;
|
||||||
@ -202,7 +202,7 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
|
|||||||
if (err) {
|
if (err) {
|
||||||
if (ovlp == NULL) {
|
if (ovlp == NULL) {
|
||||||
if (err != WAIT_TIMEOUT) {
|
if (err != WAIT_TIMEOUT) {
|
||||||
ngx_log_error(NGX_LOG_ALERT, log, err,
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
|
||||||
"GetQueuedCompletionStatus() failed");
|
"GetQueuedCompletionStatus() failed");
|
||||||
|
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
@ -216,14 +216,15 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
|
|||||||
if (timer != INFINITE) {
|
if (timer != INFINITE) {
|
||||||
delta = ngx_elapsed_msec - delta;
|
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);
|
"iocp timer: %d, delta: %d", timer, (int) delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ovlp) {
|
if (ovlp) {
|
||||||
ev = ovlp->event;
|
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) {
|
switch (key) {
|
||||||
|
|
||||||
@ -244,7 +245,7 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
|
|||||||
|
|
||||||
ev->available = bytes;
|
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);
|
"iocp event handler: " PTR_FMT, ev->event_handler);
|
||||||
|
|
||||||
ev->event_handler(ev);
|
ev->event_handler(ev);
|
||||||
|
@ -375,8 +375,8 @@ static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
|
|||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
if (ngx_accept_token == 0 && timer == 0) {
|
if (ngx_accept_mutex_held == 0 && timer == 0) {
|
||||||
/* STUB */ timer = 500;
|
/* STUB */ timer = 500;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -416,11 +416,7 @@ static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
|
|||||||
if (err) {
|
if (err) {
|
||||||
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
|
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
|
||||||
cycle->log, err, "kevent() failed");
|
cycle->log, err, "kevent() failed");
|
||||||
|
ngx_accept_mutex_unlock();
|
||||||
if (ngx_accept_token) {
|
|
||||||
*ngx_accept_mutex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -434,21 +430,13 @@ static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
|
|||||||
if (events == 0) {
|
if (events == 0) {
|
||||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
|
||||||
"kevent() returned no events without timeout");
|
"kevent() returned no events without timeout");
|
||||||
|
ngx_accept_mutex_unlock();
|
||||||
if (ngx_accept_token) {
|
|
||||||
*ngx_accept_mutex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
|
if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
|
||||||
|
ngx_accept_mutex_unlock();
|
||||||
if (ngx_accept_token) {
|
|
||||||
*ngx_accept_mutex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -532,7 +520,7 @@ static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle)
|
|||||||
#if 0
|
#if 0
|
||||||
if (ngx_threaded || ngx_accept_token) {
|
if (ngx_threaded || ngx_accept_token) {
|
||||||
#endif
|
#endif
|
||||||
if (ngx_accept_token) {
|
if (ngx_accept_mutex_held) {
|
||||||
|
|
||||||
if (ev->accept) {
|
if (ev->accept) {
|
||||||
ngx_mutex_unlock(ngx_posted_events_mutex);
|
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);
|
ev->event_handler(ev);
|
||||||
|
|
||||||
if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
|
if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
|
||||||
|
ngx_accept_mutex_unlock();
|
||||||
if (ngx_accept_token) {
|
|
||||||
*ngx_accept_mutex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NGX_ERROR;
|
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);
|
ngx_mutex_unlock(ngx_posted_events_mutex);
|
||||||
|
|
||||||
if (ngx_accept_token) {
|
ngx_accept_mutex_unlock();
|
||||||
*ngx_accept_mutex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timer && delta) {
|
if (timer && delta) {
|
||||||
ngx_event_expire_timers((ngx_msec_t) delta);
|
ngx_event_expire_timers((ngx_msec_t) delta);
|
||||||
|
@ -13,7 +13,7 @@ static int ngx_select_init(ngx_cycle_t *cycle);
|
|||||||
static void ngx_select_done(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_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_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);
|
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;
|
int i, ready, nready,found;
|
||||||
ngx_err_t err;
|
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);
|
"change max_fd: %d", max_fd);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -283,12 +283,13 @@ static int ngx_select_process_events(ngx_log_t *log)
|
|||||||
for (i = 0; i < nevents; i++) {
|
for (i = 0; i < nevents; i++) {
|
||||||
ev = event_index[i];
|
ev = event_index[i];
|
||||||
c = ev->data;
|
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);
|
"select event: fd:%d wr:%d", c->fd,ev->write);
|
||||||
}
|
}
|
||||||
#endif
|
#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)
|
#if (WIN32)
|
||||||
ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp);
|
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;
|
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);
|
"select timer: %d, delta: %d", timer, (int) delta);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -328,7 +329,7 @@ static int ngx_select_process_events(ngx_log_t *log)
|
|||||||
ngx_time_update(tv.tv_sec);
|
ngx_time_update(tv.tv_sec);
|
||||||
|
|
||||||
if (ready == 0) {
|
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");
|
"select() returned no events without timeout");
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
@ -345,12 +346,12 @@ static int ngx_select_process_events(ngx_log_t *log)
|
|||||||
if (timer) {
|
if (timer) {
|
||||||
delta = ngx_elapsed_msec - delta;
|
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);
|
"select timer: %d, delta: %d", timer, (int) delta);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (ready == 0) {
|
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");
|
"select() returned no events without timeout");
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
@ -358,14 +359,15 @@ static int ngx_select_process_events(ngx_log_t *log)
|
|||||||
|
|
||||||
#endif /* HAVE_SELECT_CHANGE_TIMEOUT */
|
#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 (err) {
|
||||||
#if (WIN32)
|
#if (WIN32)
|
||||||
ngx_log_error(NGX_LOG_ALERT, log, err, "select() failed");
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, err, "select() failed");
|
||||||
#else
|
#else
|
||||||
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
|
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
|
||||||
log, err, "select() failed");
|
cycle->log, err, "select() failed");
|
||||||
#endif
|
#endif
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
@ -380,14 +382,14 @@ static int ngx_select_process_events(ngx_log_t *log)
|
|||||||
if (ev->write) {
|
if (ev->write) {
|
||||||
if (FD_ISSET(c->fd, &work_write_fd_set)) {
|
if (FD_ISSET(c->fd, &work_write_fd_set)) {
|
||||||
found = 1;
|
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);
|
"select write %d", c->fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (FD_ISSET(c->fd, &work_read_fd_set)) {
|
if (FD_ISSET(c->fd, &work_read_fd_set)) {
|
||||||
found = 1;
|
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);
|
"select read %d", c->fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -423,7 +425,7 @@ static int ngx_select_process_events(ngx_log_t *log)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ready != 0) {
|
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) {
|
if (timer && delta) {
|
||||||
|
@ -396,8 +396,15 @@ extern ngx_thread_volatile ngx_event_t *ngx_posted_events;
|
|||||||
#if (NGX_THREADS)
|
#if (NGX_THREADS)
|
||||||
extern ngx_mutex_t *ngx_posted_events_mutex;
|
extern ngx_mutex_t *ngx_posted_events_mutex;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern ngx_atomic_t *ngx_accept_mutex_ptr;
|
||||||
extern ngx_atomic_t *ngx_accept_mutex;
|
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;
|
extern int ngx_event_flags;
|
||||||
|
@ -14,8 +14,9 @@ typedef struct {
|
|||||||
static size_t ngx_accept_log_error(void *data, char *buf, size_t len);
|
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_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)
|
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,
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||||
"accept mutex locked");
|
"accept mutex locked");
|
||||||
|
|
||||||
if (!ngx_accept_token) {
|
if (!ngx_accept_mutex_held) {
|
||||||
if (ngx_enable_accept_events(cycle) == NGX_ERROR) {
|
if (ngx_enable_accept_events(cycle) == NGX_ERROR) {
|
||||||
|
*ngx_accept_mutex = 0;
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_accept_token = 1;
|
ngx_accept_mutex_held = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ngx_accept_token) {
|
if (ngx_accept_mutex_held) {
|
||||||
if (ngx_disable_accept_events(cycle) == NGX_ERROR) {
|
if (ngx_disable_accept_events(cycle) == NGX_ERROR) {
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_accept_token = 0;
|
ngx_accept_mutex_held = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
|
@ -65,10 +65,11 @@ void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
|
|||||||
signo = 0;
|
signo = 0;
|
||||||
live = 0;
|
live = 0;
|
||||||
|
|
||||||
ngx_accept_mutex = mmap(NULL, sizeof(ngx_atomic_t), PROT_READ|PROT_WRITE,
|
ngx_accept_mutex_ptr = mmap(NULL, sizeof(ngx_atomic_t),
|
||||||
MAP_ANON|MAP_SHARED, -1, 0);
|
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,
|
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||||
"mmap(MAP_ANON|MAP_SHARED) failed");
|
"mmap(MAP_ANON|MAP_SHARED) failed");
|
||||||
/* fatal */
|
/* fatal */
|
||||||
@ -375,12 +376,13 @@ static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)
|
|||||||
ngx_process = NGX_PROCESS_WORKER;
|
ngx_process = NGX_PROCESS_WORKER;
|
||||||
ngx_last_process = 0;
|
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);
|
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 (ccf->group != (gid_t) NGX_CONF_UNSET) {
|
||||||
if (setuid(ccf->group) == -1) {
|
if (setuid(ccf->group) == -1) {
|
||||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
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_close_listening_sockets(cycle);
|
||||||
|
|
||||||
|
ngx_accept_mutex = NULL;
|
||||||
|
|
||||||
for ( ;; ) {
|
for ( ;; ) {
|
||||||
if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) {
|
if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) {
|
||||||
ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting");
|
ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting");
|
||||||
|
@ -48,6 +48,6 @@ void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
|
|||||||
for ( ;; ) {
|
for ( ;; ) {
|
||||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
|
||||||
|
|
||||||
ngx_process_events(cycle->log);
|
ngx_process_events(cycle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
/* disable some "-W4" level warnings */
|
/* disable some "-W4" level warnings */
|
||||||
|
|
||||||
|
#pragma warning(disable:4054)
|
||||||
#pragma warning(disable:4054)
|
#pragma warning(disable:4054)
|
||||||
#pragma warning(disable:4055)
|
#pragma warning(disable:4055)
|
||||||
/* unreferenced formal parameter */
|
/* unreferenced formal parameter */
|
||||||
@ -43,6 +44,8 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifdef __WATCOMC__
|
#ifdef __WATCOMC__
|
||||||
|
/* unreachable code */
|
||||||
|
#pragma disable_message(201)
|
||||||
/* disable "Symbol 'ngx_rbtree_min' has been defined, but not referenced" */
|
/* disable "Symbol 'ngx_rbtree_min' has been defined, but not referenced" */
|
||||||
#pragma disable_message(202)
|
#pragma disable_message(202)
|
||||||
#endif
|
#endif
|
||||||
@ -86,6 +89,7 @@ typedef long time_t;
|
|||||||
typedef __int64 off_t;
|
typedef __int64 off_t;
|
||||||
typedef uint32_t in_addr_t;
|
typedef uint32_t in_addr_t;
|
||||||
typedef int sig_atomic_t;
|
typedef int sig_atomic_t;
|
||||||
|
typedef uint32_t ngx_atomic_t;
|
||||||
|
|
||||||
|
|
||||||
#define OFF_T_FMT "%I64d"
|
#define OFF_T_FMT "%I64d"
|
||||||
|
Loading…
Reference in New Issue
Block a user