annotate src/event/modules/ngx_epoll_module.c @ 258:733dffa1fe97

nginx-0.0.2-2004-02-11-10:19:26 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 11 Feb 2004 07:19:26 +0000
parents 70e1c7d2b83d
children d30f2c39caae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_event.h>
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #if (TEST_BUILD_EPOLL)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 /* epoll declarations */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
16 #define EPOLLIN 0x001
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
17 #define EPOLLPRI 0x002
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
18 #define EPOLLOUT 0x004
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
19 #define EPOLLRDNORM 0x040
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
20 #define EPOLLRDBAND 0x080
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
21 #define EPOLLWRNORM 0x100
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
22 #define EPOLLWRBAND 0x200
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
23 #define EPOLLMSG 0x400
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
24 #define EPOLLERR 0x008
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
25 #define EPOLLHUP 0x010
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
26
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
27 #define EPOLLET 0x80000000
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
28 #define EPOLLONESHOT 0x40000000
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 #define EPOLL_CTL_ADD 1
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 #define EPOLL_CTL_DEL 2
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32 #define EPOLL_CTL_MOD 3
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 typedef union epoll_data {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 void *ptr;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 int fd;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 uint32_t u32;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 uint64_t u64;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 } epoll_data_t;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 struct epoll_event {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 uint32_t events;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 epoll_data_t data;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 };
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 int epoll_create(int size);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 int epoll_wait(int epfd, struct epoll_event *events, int nevents, int timeout);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 int epoll_create(int size)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 return -1;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 return -1;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 int epoll_wait(int epfd, struct epoll_event *events, int nevents, int timeout)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 return -1;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 #endif
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 typedef struct {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 u_int events;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 } ngx_epoll_conf_t;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 static int ngx_epoll_init(ngx_cycle_t *cycle);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 static void ngx_epoll_done(ngx_cycle_t *cycle);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
75 static int ngx_epoll_add_event(ngx_event_t *ev, int event, u_int flags);
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
76 static int ngx_epoll_del_event(ngx_event_t *ev, int event, u_int flags);
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 static int ngx_epoll_add_connection(ngx_connection_t *c);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78 static int ngx_epoll_del_connection(ngx_connection_t *c);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 static int ngx_epoll_process_events(ngx_log_t *log);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81 static void *ngx_epoll_create_conf(ngx_cycle_t *cycle);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82 static char *ngx_epoll_init_conf(ngx_cycle_t *cycle, void *conf);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 static int ep = -1;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 static struct epoll_event *event_list;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 static u_int nevents;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89 static ngx_str_t epoll_name = ngx_string("epoll");
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 static ngx_command_t ngx_epoll_commands[] = {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 {ngx_string("epoll_events"),
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94 NGX_EVENT_CONF|NGX_CONF_TAKE1,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 ngx_conf_set_num_slot,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 0,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 offsetof(ngx_epoll_conf_t, events),
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 NULL},
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 ngx_null_command
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 };
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 ngx_event_module_t ngx_epoll_module_ctx = {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 &epoll_name,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 ngx_epoll_create_conf, /* create configuration */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 ngx_epoll_init_conf, /* init configuration */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
110 ngx_epoll_add_event, /* add an event */
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
111 ngx_epoll_del_event, /* delete an event */
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
112 ngx_epoll_add_event, /* enable an event */
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
113 ngx_epoll_del_event, /* disable an event */
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
114 ngx_epoll_add_connection, /* add an connection */
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
115 ngx_epoll_del_connection, /* delete an connection */
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 ngx_epoll_process_events, /* process the events */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 ngx_epoll_init, /* init the events */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118 ngx_epoll_done, /* done the events */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 };
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 ngx_module_t ngx_epoll_module = {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 NGX_MODULE,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 &ngx_epoll_module_ctx, /* module context */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 ngx_epoll_commands, /* module directives */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 NGX_EVENT_MODULE, /* module type */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127 NULL, /* init module */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 NULL /* init child */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 };
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 static int ngx_epoll_init(ngx_cycle_t *cycle)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 size_t n;
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 253
diff changeset
135 ngx_event_conf_t *ecf;
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136 ngx_epoll_conf_t *epcf;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 253
diff changeset
138 ecf = ngx_event_get_conf(cycle->conf_ctx, ngx_event_core_module);
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 253
diff changeset
139
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140 epcf = ngx_event_get_conf(cycle->conf_ctx, ngx_epoll_module);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142 if (ep == -1) {
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 253
diff changeset
143 ep = epoll_create(ecf->connections / 2);
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 if (ep == -1) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147 "epoll_create() failed");
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148 return NGX_ERROR;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
151
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 if (nevents < epcf->events) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153 if (event_list) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154 ngx_free(event_list);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
157 event_list = ngx_alloc(sizeof(struct epoll_event) * epcf->events,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158 cycle->log);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159 if (event_list == NULL) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160 return NGX_ERROR;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164 nevents = epcf->events;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166 ngx_io = ngx_os_io;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 ngx_event_actions = ngx_epoll_module_ctx.actions;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
170 ngx_event_flags = NGX_USE_EDGE_EVENT;
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172 return NGX_OK;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 static void ngx_epoll_done(ngx_cycle_t *cycle)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177 {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178 if (close(ep) == -1) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
180 "epoll close() failed");
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
183 ep = -1;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 ngx_free(event_list);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187 event_list = NULL;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188 nevents = 0;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
189 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
191
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
192 static int ngx_epoll_add_event(ngx_event_t *ev, int event, u_int flags)
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
193 {
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
194 struct epoll_event ee;
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 256
diff changeset
195 ngx_connection_t *c;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
196
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
197 c = ev->data;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
198
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
199 #if (NGX_READ_EVENT != EPOLLIN) || (NGX_WRITE_EVENT != EPOLLOUT)
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
200 if (event == NGX_READ_EVENT) {
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
201 event = EPOLLIN;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
202
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 256
diff changeset
203 } else {
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 256
diff changeset
204 event = EPOLLOUT;
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
205 }
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 256
diff changeset
206 #endif
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 256
diff changeset
207
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
208 ee.events = event|EPOLLET;
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
209 ee.data.ptr = (void *) ((uintptr_t) c | c->read->instance);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
210
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
211 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
212 "epoll add event: fd:%d ev:%08X", c->fd, ee.events);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
213
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
214 if (epoll_ctl(ep, EPOLL_CTL_ADD, c->fd, &ee) == -1) {
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
215 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
216 "epoll_ctl(EPOLL_CTL_MOD, %d) failed", c->fd);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
217 return NGX_ERROR;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
218 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
219
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
220 ev->active = 1;
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
221
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
222 return NGX_OK;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
223 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
224
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
225
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
226 static int ngx_epoll_del_event(ngx_event_t *ev, int event, u_int flags)
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
227 {
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
228 struct epoll_event ee;
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 256
diff changeset
229 ngx_connection_t *c;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
230
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
231 c = ev->data;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
232
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
233 ee.events = 0;
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
234 ee.data.ptr = NULL;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
235
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
236 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
237 "epoll del event: fd:%d", c->fd);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
238
258
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
239 if (epoll_ctl(ep, EPOLL_CTL_DEL, c->fd, &ee) == -1) {
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
240 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
733dffa1fe97 nginx-0.0.2-2004-02-11-10:19:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
241 "epoll_ctl(EPOLL_CTL_MOD, %d) failed", c->fd);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
242 return NGX_ERROR;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
243 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
244
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
245 ev->active = 0;
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
246
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
247 return NGX_OK;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
248 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
249
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
250
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251 static int ngx_epoll_add_connection(ngx_connection_t *c)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 {
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
253 struct epoll_event ee;
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
254
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
255 ee.events = EPOLLIN|EPOLLOUT|EPOLLET;
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
256 ee.data.ptr = (void *) ((uintptr_t) c | c->read->instance);
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
259 "epoll add connection: fd:%d ev:%08X", c->fd, ee.events);
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
260
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
261 if (epoll_ctl(ep, EPOLL_CTL_ADD, c->fd, &ee) == -1) {
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
263 "epoll_ctl(EPOLL_CTL_ADD, %d) failed", c->fd);
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264 return NGX_ERROR;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
267 c->read->active = 1;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
268 c->write->active = 1;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
269
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270 return NGX_OK;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
271 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
272
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
274 static int ngx_epoll_del_connection(ngx_connection_t *c)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275 {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276 c->read->active = 0;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277 c->write->active = 0;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
278
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279 return NGX_OK;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
282
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 int ngx_epoll_process_events(ngx_log_t *log)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285 int events;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286 ngx_int_t instance, i;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287 size_t n;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 ngx_msec_t timer;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289 ngx_err_t err;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290 ngx_cycle_t **cycle;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291 struct timeval tv;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 ngx_connection_t *c;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293 ngx_epoch_msec_t delta;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 timer = ngx_event_find_timer();
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297 ngx_old_elapsed_msec = ngx_elapsed_msec;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299 if (timer == 0) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300 timer = (ngx_msec_t) -1;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
301 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "epoll timer: %d", timer);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
304
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
305 events = epoll_wait(ep, event_list, nevents, timer);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
306
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
307 if (events == -1) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
308 err = ngx_errno;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
309 } else {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310 err = 0;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
311 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
312
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
313 ngx_gettimeofday(&tv);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
314 ngx_time_update(tv.tv_sec);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
315
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
316 delta = ngx_elapsed_msec;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
317 ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
318
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
319 if (timer != (ngx_msec_t) -1) {
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
320 delta = ngx_elapsed_msec - delta;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
321
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
322 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
323 "epoll timer: %d, delta: %d", timer, (int) delta);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
324 } else {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
325 if (events == 0) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
326 ngx_log_error(NGX_LOG_ALERT, log, 0,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
327 "epoll_wait() returned no events without timeout");
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
328 return NGX_ERROR;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
329 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
330 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
331
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
332 if (err) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
333 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
334 log, err, "epoll_wait() failed");
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
335 return NGX_ERROR;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
336 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
337
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
338 for (i = 0; i < events; i++) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
339 c = event_list[i].data.ptr;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
340
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
341 instance = (uintptr_t) c & 1;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
342 c = (ngx_connection_t *) ((uintptr_t) c & (uintptr_t) ~1);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
343
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
344 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
345 "epoll: fd:%d ev:%04X d:" PTR_FMT,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
346 c->fd, event_list[i].events, event_list[i].data);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
347
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
348 if (c->read->instance != instance) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
349
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
350 /*
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
351 * the stale event from a file descriptor
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
352 * that was just closed in this iteration
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
353 */
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
354
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
355 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
356 "epoll: stale event " PTR_FMT, c);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357 continue;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
358 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
359
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
360 if (event_list[i].events & (EPOLLERR|EPOLLHUP)) {
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
361 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
362 "epoll_wait() error on fd:%d ev:%04X",
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
363 c->fd, event_list[i].events);
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
364 }
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
365
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
366 if (event_list[i].events & ~(EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP)) {
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
367 ngx_log_error(NGX_LOG_ALERT, log, 0,
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
368 "strange epoll_wait() events fd:%d ev:%04X",
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
369 c->fd, event_list[i].events);
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
370 }
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
371
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
372 if ((event_list[i].events & (EPOLLIN|EPOLLERR|EPOLLHUP))
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
373 && c->read->active)
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
374 {
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
375 c->read->ready = 1;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
376 c->read->event_handler(c->read);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
377 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
378
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
379 if ((event_list[i].events & (EPOLLOUT|EPOLLERR|EPOLLHUP))
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
380 && c->write->active)
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
381 {
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382 c->write->ready = 1;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383 c->write->event_handler(c->write);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387 if (timer != (ngx_msec_t) -1 && delta) {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
388 ngx_event_expire_timers((ngx_msec_t) delta);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
389 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
390
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
391 return NGX_OK;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
392 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
393
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
394
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
395 static void *ngx_epoll_create_conf(ngx_cycle_t *cycle)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
396 {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
397 ngx_epoll_conf_t *epcf;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
398
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
399 ngx_test_null(epcf, ngx_palloc(cycle->pool, sizeof(ngx_epoll_conf_t)),
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
400 NGX_CONF_ERROR);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
401
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
402 epcf->events = NGX_CONF_UNSET;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
403
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
404 return epcf;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
405 }
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
406
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
407
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
408 static char *ngx_epoll_init_conf(ngx_cycle_t *cycle, void *conf)
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
409 {
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
410 ngx_epoll_conf_t *epcf = conf;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
411
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
412 ngx_conf_init_unsigned_value(epcf->events, 512);
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
413
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
414 return NGX_CONF_OK;
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
415 }