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 }