nginx-0.0.7-2004-07-13-21:59:12 import
diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h
index 4765f3b..20fb227 100644
--- a/src/core/ngx_log.h
+++ b/src/core/ngx_log.h
@@ -163,6 +163,12 @@
ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, \
arg1, arg2, arg3, arg4, arg5, arg6)
+#define ngx_log_debug7(level, log, err, fmt, \
+ arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
+ if (log->log_level & level) \
+ ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, \
+ arg1, arg2, arg3, arg4, arg5, arg6, arg7)
+
#else /* NO VARIADIC MACROS */
#define ngx_log_debug0(level, log, err, fmt) \
@@ -194,6 +200,12 @@
if (log->log_level & level) \
ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
+#define ngx_log_debug7(level, log, err, fmt, \
+ arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
+ if (log->log_level & level) \
+ ngx_log_debug_core(log, err, fmt, \
+ arg1, arg2, arg3, arg4, arg5, arg6, arg7)
+
#endif
#else /* NO NGX_DEBUG */
@@ -205,6 +217,8 @@
#define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4)
#define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5)
#define ngx_log_debug6(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
+#define ngx_log_debug7(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6,
+ arg7)
#endif
diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c
index 29da2fb..3706e01 100644
--- a/src/event/modules/ngx_devpoll_module.c
+++ b/src/event/modules/ngx_devpoll_module.c
@@ -405,7 +405,8 @@
ngx_time_update(tv.tv_sec);
delta = ngx_elapsed_msec;
- ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+ ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+ + tv.tv_usec / 1000 - ngx_start_msec;
if (err) {
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index fac28f1..ebe2cab 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -459,7 +459,8 @@
ngx_time_update(tv.tv_sec);
delta = ngx_elapsed_msec;
- ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+ ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+ + tv.tv_usec / 1000 - ngx_start_msec;
if (timer != NGX_TIMER_INFINITE) {
delta = ngx_elapsed_msec - delta;
diff --git a/src/event/modules/ngx_iocp_module.c b/src/event/modules/ngx_iocp_module.c
index 4506cbc..5273152 100644
--- a/src/event/modules/ngx_iocp_module.c
+++ b/src/event/modules/ngx_iocp_module.c
@@ -198,7 +198,8 @@
"iocp: %d b:%d k:%d ov:" PTR_FMT, rc, bytes, key, ovlp);
delta = ngx_elapsed_msec;
- ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+ ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+ + tv.tv_usec / 1000 - ngx_start_msec;
if (err) {
if (ovlp == NULL) {
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index ddce6d9..6116de0 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -527,9 +527,6 @@
ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+ tv.tv_usec / 1000 - ngx_start_msec;
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
- "elapsed: %qd", ngx_elapsed_msec);
-
if (err) {
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
cycle->log, err, "kevent() failed");
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index 75172f1..7c23f5f 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -341,7 +341,8 @@
ngx_time_update(tv.tv_sec);
delta = ngx_elapsed_msec;
- ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+ ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+ + tv.tv_usec / 1000 - ngx_start_msec;
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"poll ready %d of %d", ready, nevents);
diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c
index 517c1a0..e6b16fe 100644
--- a/src/event/modules/ngx_rtsig_module.c
+++ b/src/event/modules/ngx_rtsig_module.c
@@ -389,7 +389,8 @@
ngx_time_update(tv.tv_sec);
delta = ngx_elapsed_msec;
- ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+ ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+ + tv.tv_usec / 1000 - ngx_start_msec;
if (err) {
ngx_accept_mutex_unlock();
diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c
index e32f1db..5cb421f 100644
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -378,8 +378,8 @@
ngx_time_update(tv.tv_sec);
deltas = tv.tv_usec / 1000;
- ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000
- - ngx_start_msec;
+ ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+ + tv.tv_usec / 1000 - ngx_start_msec;
} else {
ngx_elapsed_msec += delta;
}
@@ -392,8 +392,9 @@
ngx_gettimeofday(&tv);
ngx_time_update(tv.tv_sec);
- ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000
- - ngx_start_msec;
+ ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+ + tv.tv_usec / 1000 - ngx_start_msec;
+
if (ready == 0) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"select() returned no events without timeout");
diff --git a/src/http/modules/ngx_http_charset_filter.c b/src/http/modules/ngx_http_charset_filter.c
index 63ac0e1..d7ce88e 100644
--- a/src/http/modules/ngx_http_charset_filter.c
+++ b/src/http/modules/ngx_http_charset_filter.c
@@ -148,12 +148,19 @@
}
#endif
- if (r->headers_out.content_type == NULL
- || ngx_strncasecmp(r->headers_out.content_type->value.data,
+ if (r->headers_out.content_type == NULL) {
+ return ngx_http_next_header_filter(r);
+ }
+
+ if (ngx_strncasecmp(r->headers_out.content_type->value.data,
"text/", 5) != 0
- || ngx_strstr(r->headers_out.content_type->value.data, "charset")
- != NULL
- )
+ && ngx_strncasecmp(r->headers_out.content_type->value.data,
+ "application/x-javascript", 24) != 0)
+ {
+ return ngx_http_next_header_filter(r);
+ }
+
+ if (ngx_strstr(r->headers_out.content_type->value.data, "charset") != NULL)
{
return ngx_http_next_header_filter(r);
}
diff --git a/src/http/modules/ngx_http_headers_filter.c b/src/http/modules/ngx_http_headers_filter.c
index b850ee3..7dcb88d 100644
--- a/src/http/modules/ngx_http_headers_filter.c
+++ b/src/http/modules/ngx_http_headers_filter.c
@@ -125,7 +125,8 @@
cc->value.data = (u_char *) "no-cache";
} else {
- cc->value.data = ngx_palloc(r->pool, TIME_T_LEN + 1);
+ cc->value.data = ngx_palloc(r->pool,
+ sizeof("max-age=") + TIME_T_LEN + 1);
if (cc->value.data == NULL) {
return NGX_ERROR;
}
diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c
index d6e2d39..cd160c2 100644
--- a/src/os/unix/ngx_process.c
+++ b/src/os/unix/ngx_process.c
@@ -20,7 +20,23 @@
ngx_pid_t pid;
ngx_int_t s;
- s = respawn >= 0 ? respawn : ngx_last_process;
+ if (respawn >= 0) {
+ s = respawn;
+
+ } else {
+ for (s = 0; s < ngx_last_process; s++) {
+ if (ngx_processes[s].pid == -1) {
+ break;
+ }
+ }
+
+ if (s == NGX_MAX_PROCESSES) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
+ "no more than %d processes can be spawned",
+ NGX_MAX_PROCESSES);
+ return NGX_ERROR;
+ }
+ }
if (respawn != NGX_PROCESS_DETACHED) {
@@ -146,7 +162,9 @@
break;
}
- ngx_last_process++;
+ if (s == ngx_last_process) {
+ ngx_last_process++;
+ }
return pid;
}
@@ -220,7 +238,7 @@
one = 1;
- process = "";
+ process = "unknown process";
for (i = 0; i < ngx_last_process; i++) {
if (ngx_processes[i].pid == pid) {
@@ -231,10 +249,6 @@
}
}
- if (i == ngx_last_process) {
- process = "unknown process";
- }
-
if (WTERMSIG(status)) {
ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
"%s " PID_T_FMT " exited on signal %d%s",
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index 83b8da8..4ff2bae 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -306,11 +306,17 @@
ch.slot = ngx_process_slot;
ch.fd = ngx_processes[ngx_process_slot].channel[0];
- for (i = 0; i < ngx_last_process - 1; i++) {
+ for (i = 0; i < ngx_last_process; i++) {
- ngx_log_debug4(NGX_LOG_DEBUG_CORE, cycle->log, 0,
- "pass channel s: %d pid:" PID_T_FMT " fd:%d to:"
- PID_T_FMT, ch.slot, ch.pid, ch.fd, ngx_processes[i].pid);
+ if (i == ngx_process_slot || ngx_processes[i].pid == -1) {
+ continue;
+ }
+
+ ngx_log_debug5(NGX_LOG_DEBUG_CORE, cycle->log, 0,
+ "pass channel s:%d pid:" PID_T_FMT
+ " fd:%d to s:%d pid:" PID_T_FMT,
+ ch.slot, ch.pid, ch.fd,
+ i, ngx_processes[i].pid);
/* TODO: NGX_AGAIN */
@@ -367,7 +373,7 @@
for (i = 0; i < ngx_last_process; i++) {
- if (ngx_processes[i].detached) {
+ if (ngx_processes[i].detached || ngx_processes[i].pid == -1) {
continue;
}
@@ -432,8 +438,9 @@
live = 0;
for (i = 0; i < ngx_last_process; i++) {
- ngx_log_debug6(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
- "child: " PID_T_FMT " e:%d t:%d d:%d r:%d j:%d",
+ ngx_log_debug7(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "child: %d " PID_T_FMT " e:%d t:%d d:%d r:%d j:%d",
+ i,
ngx_processes[i].pid,
ngx_processes[i].exiting,
ngx_processes[i].exited,
@@ -441,6 +448,10 @@
ngx_processes[i].respawn,
ngx_processes[i].just_respawn);
+ if (ngx_processes[i].pid == -1) {
+ continue;
+ }
+
if (ngx_processes[i].exited) {
if (!ngx_processes[i].detached) {
@@ -454,13 +465,14 @@
for (n = 0; n < ngx_last_process; n++) {
if (ngx_processes[n].exited
+ || ngx_processes[n].pid == -1
|| ngx_processes[n].channel[0] == -1)
{
continue;
}
ngx_log_debug3(NGX_LOG_DEBUG_CORE, cycle->log, 0,
- "pass close channel s: %d pid:" PID_T_FMT
+ "pass close channel s:%d pid:" PID_T_FMT
" to:" PID_T_FMT, ch.slot, ch.pid, ngx_processes[n].pid);
/* TODO: NGX_AGAIN */
@@ -498,8 +510,11 @@
}
}
- if (i != --ngx_last_process) {
- ngx_processes[i--] = ngx_processes[ngx_last_process];
+ if (i == ngx_last_process - 1) {
+ ngx_last_process--;
+
+ } else {
+ ngx_processes[i].pid = -1;
}
} else if (ngx_processes[i].exiting || !ngx_processes[i].detached) {
@@ -593,14 +608,9 @@
}
}
- for (n = 0; n <= ngx_last_process; n++) {
+ for (n = 0; n < ngx_last_process; n++) {
- if (n == ngx_process_slot) {
- if (close(ngx_processes[n].channel[0]) == -1) {
- ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
- "close() failed");
- }
-
+ if (ngx_processes[n].pid == -1) {
continue;
}
@@ -610,6 +620,11 @@
}
}
+ if (close(ngx_processes[ngx_process_slot].channel[0]) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ "close() failed");
+ }
+
#if 0
ngx_last_process = 0;
#endif