Lines Matching full:node
36 QLIST_ENTRY(AioHandler) node;
39 static void aio_remove_fd_handler(AioContext *ctx, AioHandler *node) in aio_remove_fd_handler() argument
48 g_source_remove_poll(&ctx->source, &node->pfd); in aio_remove_fd_handler()
51 /* If aio_poll is in progress, just mark the node as deleted */ in aio_remove_fd_handler()
53 node->deleted = 1; in aio_remove_fd_handler()
54 node->pfd.revents = 0; in aio_remove_fd_handler()
60 QLIST_REMOVE(node, node); in aio_remove_fd_handler()
61 g_free(node); in aio_remove_fd_handler()
74 AioHandler *node = NULL; in aio_set_fd_handler() local
85 QLIST_FOREACH(old_node, &ctx->aio_handlers, node) { in aio_set_fd_handler()
96 node = g_new0(AioHandler, 1); in aio_set_fd_handler()
97 node->pfd.fd = s; in aio_set_fd_handler()
99 node->pfd.events = 0; in aio_set_fd_handler()
100 if (node->io_read) { in aio_set_fd_handler()
101 node->pfd.events |= G_IO_IN; in aio_set_fd_handler()
103 if (node->io_write) { in aio_set_fd_handler()
104 node->pfd.events |= G_IO_OUT; in aio_set_fd_handler()
107 node->e = &ctx->notifier; in aio_set_fd_handler()
110 node->opaque = opaque; in aio_set_fd_handler()
111 node->io_read = io_read; in aio_set_fd_handler()
112 node->io_write = io_write; in aio_set_fd_handler()
122 QLIST_INSERT_HEAD_RCU(&ctx->aio_handlers, node, node); in aio_set_fd_handler()
140 AioHandler *node; in aio_set_event_notifier() local
143 QLIST_FOREACH(node, &ctx->aio_handlers, node) { in aio_set_event_notifier()
144 if (node->e == e && !node->deleted) { in aio_set_event_notifier()
151 if (node) { in aio_set_event_notifier()
152 aio_remove_fd_handler(ctx, node); in aio_set_event_notifier()
155 if (node == NULL) { in aio_set_event_notifier()
157 node = g_new0(AioHandler, 1); in aio_set_event_notifier()
158 node->e = e; in aio_set_event_notifier()
159 node->pfd.fd = (uintptr_t)event_notifier_get_handle(e); in aio_set_event_notifier()
160 node->pfd.events = G_IO_IN; in aio_set_event_notifier()
161 QLIST_INSERT_HEAD_RCU(&ctx->aio_handlers, node, node); in aio_set_event_notifier()
163 g_source_add_poll(&ctx->source, &node->pfd); in aio_set_event_notifier()
166 node->io_notify = io_notify; in aio_set_event_notifier()
184 AioHandler *node; in aio_prepare() local
197 QLIST_FOREACH_RCU(node, &ctx->aio_handlers, node) { in aio_prepare()
198 if (node->io_read) { in aio_prepare()
199 FD_SET ((SOCKET)node->pfd.fd, &rfds); in aio_prepare()
201 if (node->io_write) { in aio_prepare()
202 FD_SET ((SOCKET)node->pfd.fd, &wfds); in aio_prepare()
207 QLIST_FOREACH_RCU(node, &ctx->aio_handlers, node) { in aio_prepare()
208 node->pfd.revents = 0; in aio_prepare()
209 if (FD_ISSET(node->pfd.fd, &rfds)) { in aio_prepare()
210 node->pfd.revents |= G_IO_IN; in aio_prepare()
214 if (FD_ISSET(node->pfd.fd, &wfds)) { in aio_prepare()
215 node->pfd.revents |= G_IO_OUT; in aio_prepare()
227 AioHandler *node; in aio_pending() local
235 QLIST_FOREACH_RCU(node, &ctx->aio_handlers, node) { in aio_pending()
236 if (node->pfd.revents && node->io_notify) { in aio_pending()
241 if ((node->pfd.revents & G_IO_IN) && node->io_read) { in aio_pending()
245 if ((node->pfd.revents & G_IO_OUT) && node->io_write) { in aio_pending()
257 AioHandler *node; in aio_dispatch_handlers() local
265 QLIST_FOREACH_SAFE_RCU(node, &ctx->aio_handlers, node, tmp) { in aio_dispatch_handlers()
266 int revents = node->pfd.revents; in aio_dispatch_handlers()
268 if (!node->deleted && in aio_dispatch_handlers()
269 (revents || event_notifier_get_handle(node->e) == event) && in aio_dispatch_handlers()
270 node->io_notify) { in aio_dispatch_handlers()
271 node->pfd.revents = 0; in aio_dispatch_handlers()
272 node->io_notify(node->e); in aio_dispatch_handlers()
275 if (node->e != &ctx->notifier) { in aio_dispatch_handlers()
280 if (!node->deleted && in aio_dispatch_handlers()
281 (node->io_read || node->io_write)) { in aio_dispatch_handlers()
282 node->pfd.revents = 0; in aio_dispatch_handlers()
283 if ((revents & G_IO_IN) && node->io_read) { in aio_dispatch_handlers()
284 node->io_read(node->opaque); in aio_dispatch_handlers()
287 if ((revents & G_IO_OUT) && node->io_write) { in aio_dispatch_handlers()
288 node->io_write(node->opaque); in aio_dispatch_handlers()
295 WSAEnumNetworkEvents(node->pfd.fd, event, &ev); in aio_dispatch_handlers()
302 if (node->deleted) { in aio_dispatch_handlers()
304 QLIST_REMOVE(node, node); in aio_dispatch_handlers()
305 g_free(node); in aio_dispatch_handlers()
325 AioHandler *node; in aio_poll() local
366 QLIST_FOREACH_RCU(node, &ctx->aio_handlers, node) { in aio_poll()
367 if (!node->deleted && node->io_notify) { in aio_poll()
369 events[count++] = event_notifier_get_handle(node->e); in aio_poll()