Mercurial > hg > nginx
annotate src/event/ngx_event_timer.c @ 52:9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 24 Jan 2003 16:09:40 +0000 |
parents | a6afbb8a2ada |
children | d1e42f1b8fd4 |
rev | line source |
---|---|
50
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
1 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
2 #include <ngx_config.h> |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
3 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
4 #include <ngx_core.h> |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
5 #include <ngx_log.h> |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
6 #include <ngx_alloc.h> |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
7 #include <ngx_connection.h> |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
8 #include <ngx_event.h> |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
9 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
10 #include <ngx_event_timer.h> |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
11 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
12 /* STUB */ |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
13 #define NGX_TIMER_HASH_SIZE 5 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
14 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
15 ngx_event_t *ngx_timer_queue; |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
16 int ngx_timer_hash_size; |
52
9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
51
diff
changeset
|
17 static int ngx_timer_cur_queue; |
49
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
18 |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
19 |
50
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
20 int ngx_event_init_timer(ngx_log_t *log) |
49
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
21 { |
50
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
22 int i; |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
23 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
24 ngx_timer_hash_size = NGX_TIMER_HASH_SIZE; |
52
9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
51
diff
changeset
|
25 ngx_timer_cur_queue = 0; |
50
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
26 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
27 ngx_test_null(ngx_timer_queue, |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
28 ngx_alloc(ngx_timer_hash_size * sizeof(ngx_event_t), log), |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
29 NGX_ERROR); |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
30 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
31 for (i = 0; i < ngx_timer_hash_size; i++) { |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
32 ngx_timer_queue[i].timer_prev = &ngx_timer_queue[i]; |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
33 ngx_timer_queue[i].timer_next = &ngx_timer_queue[i]; |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
34 } |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
35 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
36 return NGX_OK; |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
37 } |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
38 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
39 |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
40 void ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer) |
b288069a8696
nginx-0.0.1-2003-01-23-21:47:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
49
diff
changeset
|
41 { |
49
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
42 ngx_event_t *e; |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
43 |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
44 #if (NGX_DEBUG_EVENT) |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
45 ngx_connection_t *c = (ngx_connection_t *) ev->data; |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
46 ngx_log_debug(ev->log, "set timer: %d:%d" _ c->fd _ timer); |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
47 #endif |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
48 |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
49 if (ev->timer_next || ev->timer_prev) { |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
50 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, "timer already set"); |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
51 return; |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
52 } |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
53 |
51
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
54 #if (NGX_DEBUG_EVENT) |
52
9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
51
diff
changeset
|
55 ngx_log_debug(ev->log, "timer slot: %d" _ ngx_timer_cur_queue); |
51
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
56 #endif |
49
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
57 |
52
9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
51
diff
changeset
|
58 for (e = ngx_timer_queue[ngx_timer_cur_queue].timer_next; |
9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
51
diff
changeset
|
59 e != &ngx_timer_queue[ngx_timer_cur_queue] && timer > e->timer_delta; |
49
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
60 e = e->timer_next) |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
61 { |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
62 timer -= e->timer_delta; |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
63 } |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
64 |
52
9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
51
diff
changeset
|
65 ngx_timer_cur_queue++; |
9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
51
diff
changeset
|
66 if (ngx_timer_cur_queue >= ngx_timer_hash_size) { |
9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
51
diff
changeset
|
67 ngx_timer_cur_queue = 0; |
9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
51
diff
changeset
|
68 } |
9f2728644651
nginx-0.0.1-2003-01-24-19:09:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
51
diff
changeset
|
69 |
49
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
70 ev->timer_delta = timer; |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
71 |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
72 ev->timer_next = e; |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
73 ev->timer_prev = e->timer_prev; |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
74 |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
75 e->timer_prev->timer_next = ev; |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
76 e->timer_prev = ev; |
c091d5b853c8
nginx-0.0.1-2003-01-21-20:36:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
77 } |
51
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
78 |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
79 |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
80 void ngx_event_expire_timers(ngx_msec_t timer) |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
81 { |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
82 int i; |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
83 ngx_msec_t delta; |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
84 ngx_event_t *ev; |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
85 |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
86 for (i = 0; i < ngx_timer_hash_size; i++) { |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
87 |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
88 delta = timer; |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
89 |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
90 for ( ;; ) { |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
91 ev = ngx_timer_queue[i].timer_next; |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
92 |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
93 if (ev == &ngx_timer_queue[i]) { |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
94 break; |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
95 } |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
96 |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
97 if (ev->timer_delta > delta) { |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
98 ev->timer_delta -= delta; |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
99 break; |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
100 } |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
101 |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
102 delta -= ev->timer_delta; |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
103 |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
104 ngx_del_timer(ev); |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
105 ev->timedout = 1; |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
106 |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
107 if (ev->event_handler(ev) == NGX_ERROR) { |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
108 ev->close_handler(ev); |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
109 } |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
110 } |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
111 } |
a6afbb8a2ada
nginx-0.0.1-2003-01-24-09:20:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
50
diff
changeset
|
112 } |