mirror of
https://github.com/nginx/nginx.git
synced 2025-02-25 18:55:26 -06:00
merge r3473, r3474, r3385, r3386, r3537:
signal processing stability: *) use sys_errlist[] in signal handler instead of non Async-Signal-Safe strerror_r() *) do not update time in the timer signal handler, since localtime_r() is not Async-Signal-Safe function *) use previously cached GMT offset value to update time from a signal handler *) change ngx_time_update() interface since there are no notification methods those return time *) introduce ngx_time_sigsafe_update() to update the error log time only *) change ngx_time_update() interface
This commit is contained in:
parent
ea3aaae636
commit
e66eb15b7b
10
auto/unix
10
auto/unix
@ -133,6 +133,16 @@ ngx_feature_test="char buf[1024]; long n; n = strerror_r(1, buf, 1024);
|
|||||||
. auto/feature
|
. auto/feature
|
||||||
|
|
||||||
|
|
||||||
|
ngx_feature="sys_errlist[]"
|
||||||
|
ngx_feature_name="NGX_HAVE_SYS_ERRLIST"
|
||||||
|
ngx_feature_run=yes
|
||||||
|
ngx_feature_incs="#include <stdio.h>"
|
||||||
|
ngx_feature_path=
|
||||||
|
ngx_feature_libs=
|
||||||
|
ngx_feature_test="int n = sys_nerr; const char *p = sys_errlist[1];"
|
||||||
|
. auto/feature
|
||||||
|
|
||||||
|
|
||||||
ngx_feature="localtime_r()"
|
ngx_feature="localtime_r()"
|
||||||
ngx_feature_name="NGX_HAVE_LOCALTIME_R"
|
ngx_feature_name="NGX_HAVE_LOCALTIME_R"
|
||||||
ngx_feature_run=no
|
ngx_feature_run=no
|
||||||
|
@ -63,7 +63,7 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||||||
tp = ngx_timeofday();
|
tp = ngx_timeofday();
|
||||||
tp->sec = 0;
|
tp->sec = 0;
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
|
|
||||||
|
|
||||||
log = old_cycle->log;
|
log = old_cycle->log;
|
||||||
|
@ -28,6 +28,17 @@ volatile ngx_str_t ngx_cached_err_log_time;
|
|||||||
volatile ngx_str_t ngx_cached_http_time;
|
volatile ngx_str_t ngx_cached_http_time;
|
||||||
volatile ngx_str_t ngx_cached_http_log_time;
|
volatile ngx_str_t ngx_cached_http_log_time;
|
||||||
|
|
||||||
|
#if !(NGX_WIN32)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* locatime() and localtime_r() are not Async-Signal-Safe functions, therefore,
|
||||||
|
* they must not be called by a signal handler, so we use the cached
|
||||||
|
* GMT offset value. Fortunately the value is changed only two times a year.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static ngx_int_t cached_gmtoff;
|
||||||
|
#endif
|
||||||
|
|
||||||
static ngx_time_t cached_time[NGX_TIME_SLOTS];
|
static ngx_time_t cached_time[NGX_TIME_SLOTS];
|
||||||
static u_char cached_err_log_time[NGX_TIME_SLOTS]
|
static u_char cached_err_log_time[NGX_TIME_SLOTS]
|
||||||
[sizeof("1970/09/28 12:00:00")];
|
[sizeof("1970/09/28 12:00:00")];
|
||||||
@ -50,15 +61,17 @@ ngx_time_init(void)
|
|||||||
|
|
||||||
ngx_cached_time = &cached_time[0];
|
ngx_cached_time = &cached_time[0];
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ngx_time_update(time_t sec, ngx_uint_t msec)
|
ngx_time_update(void)
|
||||||
{
|
{
|
||||||
u_char *p0, *p1, *p2;
|
u_char *p0, *p1, *p2;
|
||||||
ngx_tm_t tm, gmt;
|
ngx_tm_t tm, gmt;
|
||||||
|
time_t sec;
|
||||||
|
ngx_uint_t msec;
|
||||||
ngx_time_t *tp;
|
ngx_time_t *tp;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
|
||||||
@ -66,12 +79,10 @@ ngx_time_update(time_t sec, ngx_uint_t msec)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sec == 0) {
|
ngx_gettimeofday(&tv);
|
||||||
ngx_gettimeofday(&tv);
|
|
||||||
|
|
||||||
sec = tv.tv_sec;
|
sec = tv.tv_sec;
|
||||||
msec = tv.tv_usec / 1000;
|
msec = tv.tv_usec / 1000;
|
||||||
}
|
|
||||||
|
|
||||||
ngx_current_msec = (ngx_msec_t) sec * 1000 + msec;
|
ngx_current_msec = (ngx_msec_t) sec * 1000 + msec;
|
||||||
|
|
||||||
@ -112,12 +123,14 @@ ngx_time_update(time_t sec, ngx_uint_t msec)
|
|||||||
#elif (NGX_HAVE_GMTOFF)
|
#elif (NGX_HAVE_GMTOFF)
|
||||||
|
|
||||||
ngx_localtime(sec, &tm);
|
ngx_localtime(sec, &tm);
|
||||||
tp->gmtoff = (ngx_int_t) (tm.ngx_tm_gmtoff / 60);
|
cached_gmtoff = (ngx_int_t) (tm.ngx_tm_gmtoff / 60);
|
||||||
|
tp->gmtoff = cached_gmtoff;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
ngx_localtime(sec, &tm);
|
ngx_localtime(sec, &tm);
|
||||||
tp->gmtoff = ngx_timezone(tm.ngx_tm_isdst);
|
cached_gmtoff = ngx_timezone(tm.ngx_tm_isdst);
|
||||||
|
tp->gmtoff = cached_gmtoff;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -151,6 +164,57 @@ ngx_time_update(time_t sec, ngx_uint_t msec)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if !(NGX_WIN32)
|
||||||
|
|
||||||
|
void
|
||||||
|
ngx_time_sigsafe_update(void)
|
||||||
|
{
|
||||||
|
u_char *p;
|
||||||
|
ngx_tm_t tm;
|
||||||
|
time_t sec;
|
||||||
|
ngx_time_t *tp;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
if (!ngx_trylock(&ngx_time_lock)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngx_gettimeofday(&tv);
|
||||||
|
|
||||||
|
sec = tv.tv_sec;
|
||||||
|
|
||||||
|
tp = &cached_time[slot];
|
||||||
|
|
||||||
|
if (tp->sec == sec) {
|
||||||
|
ngx_unlock(&ngx_time_lock);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slot == NGX_TIME_SLOTS - 1) {
|
||||||
|
slot = 0;
|
||||||
|
} else {
|
||||||
|
slot++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngx_gmtime(sec + cached_gmtoff * 60, &tm);
|
||||||
|
|
||||||
|
p = &cached_err_log_time[slot][0];
|
||||||
|
|
||||||
|
(void) ngx_sprintf(p, "%4d/%02d/%02d %02d:%02d:%02d",
|
||||||
|
tm.ngx_tm_year, tm.ngx_tm_mon,
|
||||||
|
tm.ngx_tm_mday, tm.ngx_tm_hour,
|
||||||
|
tm.ngx_tm_min, tm.ngx_tm_sec);
|
||||||
|
|
||||||
|
ngx_memory_barrier();
|
||||||
|
|
||||||
|
ngx_cached_err_log_time.data = p;
|
||||||
|
|
||||||
|
ngx_unlock(&ngx_time_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
u_char *
|
u_char *
|
||||||
ngx_http_time(u_char *buf, time_t t)
|
ngx_http_time(u_char *buf, time_t t)
|
||||||
{
|
{
|
||||||
|
@ -20,7 +20,8 @@ typedef struct {
|
|||||||
|
|
||||||
|
|
||||||
void ngx_time_init(void);
|
void ngx_time_init(void);
|
||||||
void ngx_time_update(time_t sec, ngx_uint_t msec);
|
void ngx_time_update(void);
|
||||||
|
void ngx_time_sigsafe_update(void);
|
||||||
u_char *ngx_http_time(u_char *buf, time_t t);
|
u_char *ngx_http_time(u_char *buf, time_t t);
|
||||||
u_char *ngx_http_cookie_time(u_char *buf, time_t t);
|
u_char *ngx_http_cookie_time(u_char *buf, time_t t);
|
||||||
void ngx_gmtime(time_t t, ngx_tm_t *tp);
|
void ngx_gmtime(time_t t, ngx_tm_t *tp);
|
||||||
|
@ -375,8 +375,8 @@ ngx_devpoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
err = 0;
|
err = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME || ngx_event_timer_alarm) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -407,8 +407,8 @@ ngx_epoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
|
|||||||
err = 0;
|
err = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME || ngx_event_timer_alarm) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -405,7 +405,7 @@ ngx_eventport_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
@ -439,7 +439,7 @@ ngx_eventport_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
for (i = 0; i < events; i++) {
|
for (i = 0; i < events; i++) {
|
||||||
|
|
||||||
if (event_list[i].portev_source == PORT_SOURCE_TIMER) {
|
if (event_list[i].portev_source == PORT_SOURCE_TIMER) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ ngx_iocp_timer(void *data)
|
|||||||
for ( ;; ) {
|
for ( ;; ) {
|
||||||
Sleep(timer);
|
Sleep(timer);
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
#if 1
|
#if 1
|
||||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, "timer");
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, "timer");
|
||||||
#endif
|
#endif
|
||||||
@ -258,7 +258,7 @@ ngx_int_t ngx_iocp_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
delta = ngx_current_msec;
|
delta = ngx_current_msec;
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||||
|
@ -543,8 +543,8 @@ ngx_kqueue_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
err = 0;
|
err = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME || ngx_event_timer_alarm) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||||
@ -595,7 +595,7 @@ ngx_kqueue_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
#if (NGX_HAVE_TIMER_EVENT)
|
#if (NGX_HAVE_TIMER_EVENT)
|
||||||
|
|
||||||
if (event_list[i].filter == EVFILT_TIMER) {
|
if (event_list[i].filter == EVFILT_TIMER) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,8 +266,8 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
|
|||||||
err = 0;
|
err = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME || ngx_event_timer_alarm) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||||
|
@ -323,7 +323,7 @@ ngx_rtsig_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
|
|||||||
"rtsig signo:%d", signo);
|
"rtsig signo:%d", signo);
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err == NGX_EAGAIN) {
|
if (err == NGX_EAGAIN) {
|
||||||
@ -349,7 +349,7 @@ ngx_rtsig_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
|
|||||||
signo, si.si_fd, si.si_band);
|
signo, si.si_fd, si.si_band);
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
|
rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
|
||||||
@ -419,7 +419,7 @@ ngx_rtsig_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
|
|||||||
|
|
||||||
} else if (signo == SIGALRM) {
|
} else if (signo == SIGALRM) {
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
|
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
|
|
||||||
@ -671,7 +671,7 @@ ngx_rtsig_process_overflow(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
|
||||||
|
@ -266,8 +266,8 @@ ngx_select_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
err = 0;
|
err = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME || ngx_event_timer_alarm) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||||
|
@ -273,7 +273,7 @@ ngx_select_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (flags & NGX_UPDATE_TIME) {
|
if (flags & NGX_UPDATE_TIME) {
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||||
|
@ -562,8 +562,6 @@ ngx_timer_signal_handler(int signo)
|
|||||||
{
|
{
|
||||||
ngx_event_timer_alarm = 1;
|
ngx_event_timer_alarm = 1;
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, "timer signal");
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, "timer signal");
|
||||||
#endif
|
#endif
|
||||||
|
@ -1128,7 +1128,7 @@ ngx_http_file_cache_manager_sleep(ngx_http_file_cache_t *cache)
|
|||||||
|
|
||||||
if (cache->files++ > 100) {
|
if (cache->files++ > 100) {
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
|
|
||||||
elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last));
|
elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last));
|
||||||
|
|
||||||
@ -1145,7 +1145,7 @@ ngx_http_file_cache_manager_sleep(ngx_http_file_cache_t *cache)
|
|||||||
|
|
||||||
ngx_msleep(200);
|
ngx_msleep(200);
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
cache->last = ngx_current_msec;
|
cache->last = ngx_current_msec;
|
||||||
|
@ -64,10 +64,22 @@ u_char *ngx_strerror_r(int err, u_char *errstr, size_t size);
|
|||||||
|
|
||||||
/* Solaris and Tru64 UNIX have thread-safe strerror() */
|
/* Solaris and Tru64 UNIX have thread-safe strerror() */
|
||||||
|
|
||||||
#define ngx_strerror_r(err, errstr, size) \
|
#define ngx_strerror_r(err, errstr, size) \
|
||||||
ngx_cpystrn(errstr, (u_char *) strerror(err), size)
|
ngx_cpystrn(errstr, (u_char *) strerror(err), size)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if (NGX_HAVE_SYS_ERRLIST)
|
||||||
|
|
||||||
|
#define ngx_sigsafe_strerror(err) \
|
||||||
|
(err > 0 && err < sys_nerr) ? sys_errlist[err] : "Unknown error"
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define ngx_sigsafe_strerror(err) ""
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif /* _NGX_ERRNO_H_INCLUDED_ */
|
#endif /* _NGX_ERRNO_H_INCLUDED_ */
|
||||||
|
@ -315,7 +315,7 @@ ngx_signal_handler(int signo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_sigsafe_update();
|
||||||
|
|
||||||
action = "";
|
action = "";
|
||||||
|
|
||||||
@ -476,16 +476,17 @@ ngx_process_get_status(void)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (err == NGX_ECHILD) {
|
if (err == NGX_ECHILD) {
|
||||||
ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, errno,
|
ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0,
|
||||||
"waitpid() failed");
|
"waitpid() failed (%d: %s)",
|
||||||
|
err, ngx_sigsafe_strerror(err));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, errno,
|
ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
|
||||||
"waitpid() failed");
|
"waitpid() failed (%d: %s)",
|
||||||
|
err, ngx_sigsafe_strerror(err));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ ngx_master_process_cycle(ngx_cycle_t *cycle)
|
|||||||
|
|
||||||
sigsuspend(&set);
|
sigsuspend(&set);
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||||
"wake up, sigio %i", sigio);
|
"wake up, sigio %i", sigio);
|
||||||
@ -1337,7 +1337,7 @@ ngx_cache_manager_process_handler(ngx_event_t *ev)
|
|||||||
|
|
||||||
next = (n <= next) ? n : next;
|
next = (n <= next) ? n : next;
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1367,7 +1367,7 @@ ngx_cache_loader_process_handler(ngx_event_t *ev)
|
|||||||
|
|
||||||
if (path[i]->loader) {
|
if (path[i]->loader) {
|
||||||
path[i]->loader(path[i]->data);
|
path[i]->loader(path[i]->data);
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ ngx_spawn_process(ngx_cycle_t *cycle, char *name, ngx_int_t respawn)
|
|||||||
|
|
||||||
rc = WaitForMultipleObjects(2, events, 0, 5000);
|
rc = WaitForMultipleObjects(2, events, 0, 5000);
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
|
||||||
"WaitForMultipleObjects: %ul", rc);
|
"WaitForMultipleObjects: %ul", rc);
|
||||||
|
@ -140,7 +140,7 @@ ngx_master_process_cycle(ngx_cycle_t *cycle)
|
|||||||
ev = WaitForMultipleObjects(nev, events, 0, timeout);
|
ev = WaitForMultipleObjects(nev, events, 0, timeout);
|
||||||
|
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
|
||||||
"master WaitForMultipleObjects: %ul", ev);
|
"master WaitForMultipleObjects: %ul", ev);
|
||||||
@ -679,7 +679,7 @@ ngx_worker_process_cycle(ngx_cycle_t *cycle, char *mevn)
|
|||||||
ev = WaitForMultipleObjects(3, events, 0, INFINITE);
|
ev = WaitForMultipleObjects(3, events, 0, INFINITE);
|
||||||
|
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
|
||||||
"worker WaitForMultipleObjects: %ul", ev);
|
"worker WaitForMultipleObjects: %ul", ev);
|
||||||
@ -738,7 +738,7 @@ ngx_worker_process_cycle(ngx_cycle_t *cycle, char *mevn)
|
|||||||
ev = WaitForMultipleObjects(nev, events, 0, INFINITE);
|
ev = WaitForMultipleObjects(nev, events, 0, INFINITE);
|
||||||
|
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
|
||||||
"worker exit WaitForMultipleObjects: %ul", ev);
|
"worker exit WaitForMultipleObjects: %ul", ev);
|
||||||
@ -907,7 +907,7 @@ ngx_cache_manager_thread(void *data)
|
|||||||
ev = WaitForMultipleObjects(2, events, 0, INFINITE);
|
ev = WaitForMultipleObjects(2, events, 0, INFINITE);
|
||||||
|
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
|
||||||
"cache manager WaitForMultipleObjects: %ul", ev);
|
"cache manager WaitForMultipleObjects: %ul", ev);
|
||||||
@ -968,7 +968,7 @@ ngx_cache_manager_process_handler(void)
|
|||||||
|
|
||||||
next = (n <= next) ? n : next;
|
next = (n <= next) ? n : next;
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -980,7 +980,7 @@ ngx_cache_manager_process_handler(void)
|
|||||||
|
|
||||||
if (ev != WAIT_TIMEOUT) {
|
if (ev != WAIT_TIMEOUT) {
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, ngx_cycle->log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_CORE, ngx_cycle->log, 0,
|
||||||
"cache manager WaitForSingleObject: %ul", ev);
|
"cache manager WaitForSingleObject: %ul", ev);
|
||||||
@ -1008,7 +1008,7 @@ ngx_cache_loader_thread(void *data)
|
|||||||
|
|
||||||
if (path[i]->loader) {
|
if (path[i]->loader) {
|
||||||
path[i]->loader(path[i]->data);
|
path[i]->loader(path[i]->data);
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user