comparison src/event/ngx_event_timer.c @ 205:4a9a2b1dd6fa

nginx-0.0.1-2003-12-04-17:53:00 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 04 Dec 2003 14:53:00 +0000
parents 8dee38ea9117
children 9aa426375256
comparison
equal deleted inserted replaced
204:e0bcfb77d6c7 205:4a9a2b1dd6fa
1 1
2 #include <ngx_config.h> 2 #include <ngx_config.h>
3 #include <ngx_core.h> 3 #include <ngx_core.h>
4 #include <ngx_event.h> 4 #include <ngx_event.h>
5 5
6
7 ngx_rbtree_t *ngx_event_timer_rbtree;
8
9
10 int ngx_event_timer_init(ngx_cycle_t *cycle)
11 {
12 ngx_event_timer_rbtree = &sentinel;
13 sentinel.left = &sentinel;
14 sentinel.right = &sentinel;
15 sentinel.parent = &sentinel;
16
17 return NGX_OK;
18 }
19
20
21 void ngx_event_timer_done(ngx_cycle_t *cycle)
22 {
23 }
24
25
26 int ngx_event_find_timer(void)
27 {
28 ngx_rbtree_t *node;
29
30 node = ngx_rbtree_min(ngx_event_timer_rbtree);
31
32 if (node == &sentinel) {
33 return 0;
34
35 } else {
36 return node->key * NGX_TIMER_RESOLUTION - ngx_elapsed_msec;
37 }
38 }
39
40
41 void ngx_event_expire_timers(ngx_msec_t timer)
42 {
43 ngx_event_t *ev;
44 ngx_rbtree_t *node;
45
46 for ( ;; ) {
47 node = ngx_rbtree_min(ngx_event_timer_rbtree);
48
49 if (node == &sentinel) {
50 break;
51 }
52
53 if ((ngx_msec_t) node->key <=
54 (ngx_elapsed_msec + timer) / NGX_TIMER_RESOLUTION)
55 {
56 ev = (ngx_event_t *)
57 ((char *) node - offsetof(ngx_event_t, rbtree));
58
59 ngx_del_timer(ev);
60
61 if (ev->delayed) {
62 ev->delayed = 0;
63 if (ev->ready == 0) {
64 continue;
65 }
66
67 } else {
68 ev->timedout = 1;
69 }
70
71 ev->event_handler(ev);
72 continue;
73 }
74
75 break;
76 }
77 }
78
79
80 #if 0
6 81
7 /* TODO: in multithreaded enviroment all timer operations must be 82 /* TODO: in multithreaded enviroment all timer operations must be
8 protected by the single mutex */ 83 protected by the single mutex */
9 84
10 85
273 ngx_del_timer(ev); 348 ngx_del_timer(ev);
274 ngx_add_timer(ev, timer); 349 ngx_add_timer(ev, timer);
275 } 350 }
276 #endif 351 #endif
277 } 352 }
353
354
355 #endif