Mercurial > hg > nginx
comparison src/core/nginx.c @ 224:d427f1c3fe95
nginx-0.0.1-2004-01-13-09:39:14 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 13 Jan 2004 06:39:14 +0000 |
parents | 5d168ebc1ecc |
children | 2e9a8a14a0cf |
comparison
equal
deleted
inserted
replaced
223:5d168ebc1ecc | 224:d427f1c3fe95 |
---|---|
228 } | 228 } |
229 | 229 |
230 | 230 |
231 static void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx) | 231 static void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx) |
232 { | 232 { |
233 int signo; | |
233 ngx_msec_t delay; | 234 ngx_msec_t delay; |
234 struct timeval tv; | 235 struct timeval tv; |
235 ngx_uint_t i, live; | 236 ngx_uint_t i, live, first; |
236 sigset_t set, wset; | 237 sigset_t set, wset; |
237 | 238 |
238 delay = 125; | 239 delay = 125; |
239 | 240 |
240 sigemptyset(&set); | 241 sigemptyset(&set); |
275 | 276 |
276 /* a cycle with the same configuration */ | 277 /* a cycle with the same configuration */ |
277 | 278 |
278 for ( ;; ) { | 279 for ( ;; ) { |
279 | 280 |
281 signo = 0; | |
282 first = 1; | |
283 | |
280 /* an event loop */ | 284 /* an event loop */ |
281 | 285 |
282 for ( ;; ) { | 286 for ( ;; ) { |
283 | 287 |
284 if (ngx_process == NGX_PROCESS_MASTER) { | 288 if (ngx_process == NGX_PROCESS_MASTER) { |
297 || ngx_process == NGX_PROCESS_PAUSED) | 301 || ngx_process == NGX_PROCESS_PAUSED) |
298 { | 302 { |
299 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 303 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
300 "quit cycle"); | 304 "quit cycle"); |
301 | 305 |
302 if (delay < 15000) { | |
303 delay *= 2; | |
304 } | |
305 | |
306 if (sigprocmask(SIG_UNBLOCK, &set, NULL) == -1) { | 306 if (sigprocmask(SIG_UNBLOCK, &set, NULL) == -1) { |
307 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | 307 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
308 "sigprocmask() failed"); | 308 "sigprocmask() failed"); |
309 continue; | 309 continue; |
310 } | 310 } |
311 | 311 |
312 if (ngx_reap == 0) { | 312 if (ngx_reap == 0) { |
313 | |
314 if (delay < 15000) { | |
315 delay *= 2; | |
316 } | |
317 | |
313 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 318 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
314 "sleep %d", delay / 1000); | 319 "msleep %d", delay); |
315 | 320 |
316 ngx_msleep(delay); | 321 ngx_msleep(delay); |
317 | 322 |
318 ngx_gettimeofday(&tv); | 323 ngx_gettimeofday(&tv); |
319 ngx_time_update(tv.tv_sec); | 324 ngx_time_update(tv.tv_sec); |
367 } | 372 } |
368 } | 373 } |
369 | 374 |
370 if (ngx_terminate) { | 375 if (ngx_terminate) { |
371 if (delay > 10000) { | 376 if (delay > 10000) { |
372 ngx_signal_processes(cycle, SIGKILL); | 377 signo = SIGKILL; |
373 } else { | 378 } else { |
374 ngx_signal_processes(cycle, | 379 signo = ngx_signal_value(NGX_TERMINATE_SIGNAL); |
375 ngx_signal_value(NGX_TERMINATE_SIGNAL)); | |
376 } | 380 } |
377 ngx_process = NGX_PROCESS_QUITING; | 381 ngx_process = NGX_PROCESS_QUITING; |
378 } | 382 } |
379 | 383 |
380 if (ngx_quit) { | 384 if (ngx_quit) { |
381 ngx_signal_processes(cycle, | 385 signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL); |
382 ngx_signal_value(NGX_SHUTDOWN_SIGNAL)); | |
383 ngx_process = NGX_PROCESS_QUITING; | 386 ngx_process = NGX_PROCESS_QUITING; |
384 } | 387 } |
385 | 388 |
386 if (ngx_pause) { | 389 if (ngx_pause) { |
387 ngx_signal_processes(cycle, | 390 signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL); |
388 ngx_signal_value(NGX_SHUTDOWN_SIGNAL)); | |
389 ngx_process = NGX_PROCESS_PAUSED; | 391 ngx_process = NGX_PROCESS_PAUSED; |
390 } | 392 } |
391 | 393 |
392 if (ngx_reap) { | 394 if (ngx_reap) { |
393 ngx_reap = 0; | 395 ngx_reap = 0; |
400 "changing binary"); | 402 "changing binary"); |
401 ngx_exec_new_binary(cycle, ctx->argv); | 403 ngx_exec_new_binary(cycle, ctx->argv); |
402 } | 404 } |
403 | 405 |
404 if (ngx_reconfigure) { | 406 if (ngx_reconfigure) { |
407 signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL); | |
405 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reconfiguring"); | 408 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reconfiguring"); |
406 break; | |
407 } | 409 } |
408 | 410 |
409 if (ngx_reopen) { | 411 if (ngx_reopen) { |
412 signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL); | |
410 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, | 413 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, |
411 "reopening logs"); | 414 "reopening logs"); |
412 ngx_reopen_files(cycle); | 415 ngx_reopen_files(cycle); |
413 ngx_reopen = 0; | 416 ngx_reopen = 0; |
414 } | 417 } |
415 | 418 |
416 if (first) { | 419 if (signo) { |
417 for (i = 0; i < ngx_last_process; i++) { | 420 if (first) { |
418 if (!ngx_processes[i].detached) { | 421 for (i = 0; i < ngx_last_process; i++) { |
419 ngx_processes[i].signal = 1; | 422 if (!ngx_processes[i].detached) { |
423 ngx_processes[i].signal = 1; | |
424 } | |
420 } | 425 } |
426 first = 0; | |
427 delay = 125; | |
421 } | 428 } |
422 first = 1; | 429 |
423 } | 430 ngx_signal_processes(cycle, signo); |
424 | 431 } |
432 | |
433 if (ngx_reconfigure) { | |
434 break; | |
435 } | |
425 } | 436 } |
426 | 437 |
427 if (ngx_process == NGX_PROCESS_PAUSED) { | 438 if (ngx_process == NGX_PROCESS_PAUSED) { |
428 ngx_process = NGX_PROCESS_MASTER; | 439 ngx_process = NGX_PROCESS_MASTER; |
429 | 440 |