Mercurial > hg > nginx-quic
comparison src/event/modules/ngx_kqueue_module.c @ 17:8dd06e2844f5
nginx-0.0.1-2002-09-27-19:05:29 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 27 Sep 2002 15:05:29 +0000 |
parents | f8a0d0f31a24 |
children | 72ad26c77d2d |
comparison
equal
deleted
inserted
replaced
16:6ce4755737b4 | 17:8dd06e2844f5 |
---|---|
25 static struct kevent *change_list, *event_list; | 25 static struct kevent *change_list, *event_list; |
26 static int nchanges, nevents; | 26 static int nchanges, nevents; |
27 | 27 |
28 static ngx_event_t timer_queue; | 28 static ngx_event_t timer_queue; |
29 | 29 |
30 void ngx_kqueue_init(int max_connections, ngx_log_t *log) | 30 int ngx_kqueue_init(int max_connections, ngx_log_t *log) |
31 { | 31 { |
32 int size = sizeof(struct kevent) * 512; | 32 int size = sizeof(struct kevent) * 512; |
33 | 33 |
34 nchanges = 0; | 34 nchanges = 0; |
35 nevents = 512; | 35 nevents = 512; |
36 | 36 |
37 kq = kqueue(); | 37 kq = kqueue(); |
38 | 38 |
39 if (kq == -1) { | 39 if (kq == -1) { |
40 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "kqueue() failed"); | 40 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "kqueue() failed"); |
41 exit(1); | 41 return NGX_ERROR; |
42 } | 42 } |
43 | 43 |
44 change_list = ngx_alloc(size, log); | 44 ngx_test_null(change_list, ngx_alloc(size, log), NGX_ERROR); |
45 event_list = ngx_alloc(size, log); | 45 ngx_test_null(event_list, ngx_alloc(size, log), NGX_ERROR); |
46 | 46 |
47 timer_queue.timer_prev = &timer_queue; | 47 timer_queue.timer_prev = &timer_queue; |
48 timer_queue.timer_next = &timer_queue; | 48 timer_queue.timer_next = &timer_queue; |
49 | 49 |
50 #if !(USE_KQUEUE) | 50 #if !(USE_KQUEUE) |
51 ngx_event_actions.add = ngx_kqueue_add_event; | 51 ngx_event_actions.add = ngx_kqueue_add_event; |
52 ngx_event_actions.del = ngx_kqueue_del_event; | 52 ngx_event_actions.del = ngx_kqueue_del_event; |
53 ngx_event_actions.timer = ngx_kqueue_add_timer; | 53 ngx_event_actions.timer = ngx_kqueue_add_timer; |
54 ngx_event_actions.process = ngx_kqueue_process_events; | 54 ngx_event_actions.process = ngx_kqueue_process_events; |
55 #endif | 55 #endif |
56 | |
57 return NGX_OK; | |
56 } | 58 } |
57 | 59 |
58 int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) | 60 int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) |
59 { | 61 { |
60 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1: 0; | 62 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1: 0; |
75 ngx_log_debug(ev->log, "kqueue set event: %d: ft:%d f:%08x" _ | 77 ngx_log_debug(ev->log, "kqueue set event: %d: ft:%d f:%08x" _ |
76 cn->fd _ filter _ flags); | 78 cn->fd _ filter _ flags); |
77 | 79 |
78 if (nchanges >= nevents) { | 80 if (nchanges >= nevents) { |
79 ngx_log_error(NGX_LOG_WARN, ev->log, 0, | 81 ngx_log_error(NGX_LOG_WARN, ev->log, 0, |
80 "ngx_kqueue_set_event: change list is filled up"); | 82 "kqueue change list is filled up"); |
81 | 83 |
82 if (kevent(kq, change_list, nchanges, NULL, 0, &ts) == -1) { | 84 if (kevent(kq, change_list, nchanges, NULL, 0, &ts) == -1) { |
83 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "kevent failed"); | 85 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "kevent failed"); |
84 return NGX_ERROR; | 86 return NGX_ERROR; |
85 } | 87 } |