… | |
… | |
53 | #include <poll.h> |
53 | #include <poll.h> |
54 | #include <port.h> |
54 | #include <port.h> |
55 | #include <string.h> |
55 | #include <string.h> |
56 | #include <errno.h> |
56 | #include <errno.h> |
57 | |
57 | |
58 | void inline_speed |
58 | inline_speed |
|
|
59 | void |
59 | port_associate_and_check (EV_P_ int fd, int ev) |
60 | port_associate_and_check (EV_P_ int fd, int ev) |
60 | { |
61 | { |
61 | if (0 > |
62 | if (0 > |
62 | port_associate ( |
63 | port_associate ( |
63 | backend_fd, PORT_SOURCE_FD, fd, |
64 | backend_fd, PORT_SOURCE_FD, fd, |
… | |
… | |
134 | port_eventmax = array_nextsize (sizeof (port_event_t), port_eventmax, port_eventmax + 1); |
135 | port_eventmax = array_nextsize (sizeof (port_event_t), port_eventmax, port_eventmax + 1); |
135 | port_events = (port_event_t *)ev_malloc (sizeof (port_event_t) * port_eventmax); |
136 | port_events = (port_event_t *)ev_malloc (sizeof (port_event_t) * port_eventmax); |
136 | } |
137 | } |
137 | } |
138 | } |
138 | |
139 | |
139 | int inline_size |
140 | inline_size |
|
|
141 | int |
140 | port_init (EV_P_ int flags) |
142 | port_init (EV_P_ int flags) |
141 | { |
143 | { |
142 | /* Initialize the kernel queue */ |
144 | /* Initialize the kernel queue */ |
143 | if ((backend_fd = port_create ()) < 0) |
145 | if ((backend_fd = port_create ()) < 0) |
144 | return 0; |
146 | return 0; |
… | |
… | |
151 | * opensolaris does something very stupid: it checks if the time has already |
153 | * opensolaris does something very stupid: it checks if the time has already |
152 | * elapsed and doesn't round up if that is the case,m otherwise it DOES round |
154 | * elapsed and doesn't round up if that is the case,m otherwise it DOES round |
153 | * up. Since we can't know what the case is, we need to guess by using a |
155 | * up. Since we can't know what the case is, we need to guess by using a |
154 | * "large enough" timeout. Normally, 1e-9 would be correct. |
156 | * "large enough" timeout. Normally, 1e-9 would be correct. |
155 | */ |
157 | */ |
156 | backend_fudge = 1e-3; /* needed to compensate for port_getn returning early */ |
158 | backend_mintime = 1e-3; /* needed to compensate for port_getn returning early */ |
157 | backend_modify = port_modify; |
159 | backend_modify = port_modify; |
158 | backend_poll = port_poll; |
160 | backend_poll = port_poll; |
159 | |
161 | |
160 | port_eventmax = 64; /* initial number of events receivable per poll */ |
162 | port_eventmax = 64; /* initial number of events receivable per poll */ |
161 | port_events = (port_event_t *)ev_malloc (sizeof (port_event_t) * port_eventmax); |
163 | port_events = (port_event_t *)ev_malloc (sizeof (port_event_t) * port_eventmax); |
162 | |
164 | |
163 | return EVBACKEND_PORT; |
165 | return EVBACKEND_PORT; |
164 | } |
166 | } |
165 | |
167 | |
166 | void inline_size |
168 | inline_size |
|
|
169 | void |
167 | port_destroy (EV_P) |
170 | port_destroy (EV_P) |
168 | { |
171 | { |
169 | ev_free (port_events); |
172 | ev_free (port_events); |
170 | } |
173 | } |
171 | |
174 | |
172 | void inline_size |
175 | inline_size |
|
|
176 | void |
173 | port_fork (EV_P) |
177 | port_fork (EV_P) |
174 | { |
178 | { |
175 | close (backend_fd); |
179 | close (backend_fd); |
176 | |
180 | |
177 | while ((backend_fd = port_create ()) < 0) |
181 | while ((backend_fd = port_create ()) < 0) |