Home | History | Annotate | Download | only in libevent

Lines Matching refs:port

66 	struct event_iocp_port *port = port_;
67 long ms = port->ms;
68 HANDLE p = port->port;
79 EnterCriticalSection(&port->lock);
80 if (port->shutdown) {
81 if (--port->n_live_threads == 0)
82 ReleaseSemaphore(port->shutdownSemaphore, 1,
84 LeaveCriticalSection(&port->lock);
87 LeaveCriticalSection(&port->lock);
95 EnterCriticalSection(&port->lock);
96 if (--port->n_live_threads == 0)
97 ReleaseSemaphore(port->shutdownSemaphore, 1, NULL);
98 LeaveCriticalSection(&port->lock);
102 event_iocp_port_associate_(struct event_iocp_port *port, evutil_socket_t fd,
106 h = CreateIoCompletionPort((HANDLE)fd, port->port, key, port->n_threads);
178 struct event_iocp_port *port;
184 if (!(port = mm_calloc(1, sizeof(struct event_iocp_port))))
189 port->n_threads = n_cpus * 2;
190 port->threads = mm_calloc(port->n_threads, sizeof(HANDLE));
191 if (!port->threads)
194 port->port = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0,
196 port->ms = -1;
197 if (!port->port)
200 port->shutdownSemaphore = CreateSemaphore(NULL, 0, 1, NULL);
201 if (!port->shutdownSemaphore)
204 for (i=0; i<port->n_threads; ++i) {
205 ev_uintptr_t th = _beginthread(loop, 0, port);
208 port->threads[i] = (HANDLE)th;
209 ++port->n_live_threads;
212 InitializeCriticalSectionAndSpinCount(&port->lock, 1000);
214 return port;
216 if (port->port)
217 CloseHandle(port->port);
218 if (port->threads)
219 mm_free(port->threads);
220 if (port->shutdownSemaphore)
221 CloseHandle(port->shutdownSemaphore);
222 mm_free(port);
227 event_iocp_port_unlock_and_free_(struct event_iocp_port *port)
229 DeleteCriticalSection(&port->lock);
230 CloseHandle(port->port);
231 CloseHandle(port->shutdownSemaphore);
232 mm_free(port->threads);
233 mm_free(port);
237 event_iocp_notify_all(struct event_iocp_port *port)
240 for (i=0; i<port->n_threads; ++i) {
241 r = PostQueuedCompletionStatus(port->port, 0, NOTIFICATION_KEY,
250 event_iocp_shutdown_(struct event_iocp_port *port, long waitMsec)
255 EnterCriticalSection(&port->lock);
256 port->shutdown = 1;
257 LeaveCriticalSection(&port->lock);
258 event_iocp_notify_all(port);
263 WaitForSingleObject(port->shutdownSemaphore, ms);
264 EnterCriticalSection(&port->lock);
265 n = port->n_live_threads;
266 LeaveCriticalSection(&port->lock);
268 event_iocp_port_unlock_and_free_(port);
277 struct event_iocp_port *port, struct event_overlapped *o,
282 r = PostQueuedCompletionStatus(port->port, n, key, &o->overlapped);