Mercurial > hg > nginx
comparison src/event/ngx_event_timer.c @ 51:a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 24 Jan 2003 06:20:47 +0000 |
parents | b288069a8696 |
children | 9f2728644651 |
comparison
equal
deleted
inserted
replaced
50:b288069a8696 | 51:a6afbb8a2ada |
---|---|
49 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, "timer already set"); | 49 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, "timer already set"); |
50 return; | 50 return; |
51 } | 51 } |
52 | 52 |
53 n = timer % ngx_timer_hash_size; | 53 n = timer % ngx_timer_hash_size; |
54 #if (NGX_DEBUG_EVENT) | |
55 ngx_log_debug(ev->log, "timer slot: %d" _ n); | |
56 #endif | |
54 | 57 |
55 for (e = ngx_timer_queue[n].timer_next; | 58 for (e = ngx_timer_queue[n].timer_next; |
56 e != &ngx_timer_queue[n] && timer > e->timer_delta; | 59 e != &ngx_timer_queue[n] && timer > e->timer_delta; |
57 e = e->timer_next) | 60 e = e->timer_next) |
58 { | 61 { |
65 ev->timer_prev = e->timer_prev; | 68 ev->timer_prev = e->timer_prev; |
66 | 69 |
67 e->timer_prev->timer_next = ev; | 70 e->timer_prev->timer_next = ev; |
68 e->timer_prev = ev; | 71 e->timer_prev = ev; |
69 } | 72 } |
73 | |
74 | |
75 void ngx_event_expire_timers(ngx_msec_t timer) | |
76 { | |
77 int i; | |
78 ngx_msec_t delta; | |
79 ngx_event_t *ev; | |
80 | |
81 for (i = 0; i < ngx_timer_hash_size; i++) { | |
82 | |
83 delta = timer; | |
84 | |
85 for ( ;; ) { | |
86 ev = ngx_timer_queue[i].timer_next; | |
87 | |
88 if (ev == &ngx_timer_queue[i]) { | |
89 break; | |
90 } | |
91 | |
92 if (ev->timer_delta > delta) { | |
93 ev->timer_delta -= delta; | |
94 break; | |
95 } | |
96 | |
97 delta -= ev->timer_delta; | |
98 | |
99 ngx_del_timer(ev); | |
100 ev->timedout = 1; | |
101 | |
102 if (ev->event_handler(ev) == NGX_ERROR) { | |
103 ev->close_handler(ev); | |
104 } | |
105 } | |
106 } | |
107 } |