Lines Matching refs:eloop

18 #include "eloop.h"
59 WPA_TRACE_REF(eloop);
70 WPA_TRACE_REF(eloop);
129 static struct eloop_data eloop;
137 wpa_trace_show("eloop SIGSEGV");
147 wpa_trace_add_ref(&table->table[i], eloop,
161 wpa_trace_remove_ref(&table->table[i], eloop,
181 if (sock != eloop.ctrl_fd[ELOOP_CTRL_FD_READ]) {
186 if (eloop.ctrl_fd[ELOOP_CTRL_FD_READ] != -1) {
187 read(eloop.ctrl_fd[ELOOP_CTRL_FD_READ], &buf, 1);
197 ret = pipe(eloop.ctrl_fd);
202 eloop_register_read_sock(eloop.ctrl_fd[ELOOP_CTRL_FD_READ],
210 if (eloop.ctrl_fd[ELOOP_CTRL_FD_READ] != -1) {
211 eloop_unregister_read_sock(eloop.ctrl_fd[ELOOP_CTRL_FD_READ]);
213 close(eloop.ctrl_fd[ELOOP_CTRL_FD_READ]);
214 close(eloop.ctrl_fd[ELOOP_CTRL_FD_WRITE]);
215 eloop.ctrl_fd[ELOOP_CTRL_FD_READ] = -1;
216 eloop.ctrl_fd[ELOOP_CTRL_FD_WRITE] = -1;
226 if (eloop.ctrl_fd[ELOOP_CTRL_FD_WRITE] != -1) {
227 ret = write(eloop.ctrl_fd[ELOOP_CTRL_FD_WRITE], &buf, 1);
237 os_memset(&eloop, 0, sizeof(eloop));
238 dl_list_init(&eloop.timeout);
240 eloop.epollfd = epoll_create1(0);
241 if (eloop.epollfd < 0) {
248 eloop.kqueuefd = kqueue();
249 if (eloop.kqueuefd < 0) {
256 eloop.readers.type = EVENT_TYPE_READ;
257 eloop.writers.type = EVENT_TYPE_WRITE;
258 eloop.exceptions.type = EVENT_TYPE_EXCEPTION;
293 if (epoll_ctl(eloop.epollfd, EPOLL_CTL_ADD, sock, &ev) < 0) {
323 if (kevent(eloop.kqueuefd, &ke, 1, NULL, 0, NULL) == -1) {
351 if (sock > eloop.max_sock)
354 new_max_sock = eloop.max_sock;
360 if (new_max_sock >= eloop.max_pollfd_map) {
362 nmap = os_realloc_array(eloop.pollfds_map, new_max_sock + 50,
367 eloop.max_pollfd_map = new_max_sock + 50;
368 eloop.pollfds_map = nmap;
371 if (eloop.count + 1 > eloop.max_poll_fds) {
373 int nmax = eloop.count + 1 + 50;
374 n = os_realloc_array(eloop.pollfds, nmax,
379 eloop.max_poll_fds = nmax;
380 eloop.pollfds = n;
384 if (new_max_sock >= eloop.max_fd) {
386 temp_table = os_realloc_array(eloop.fd_table, next,
391 eloop.max_fd = next;
392 eloop.fd_table = temp_table;
397 if (eloop.count + 1 > eloop.epoll_max_event_num) {
398 next = eloop.epoll_max_event_num == 0 ? 8 :
399 eloop.epoll_max_event_num * 2;
400 temp_events = os_realloc_array(eloop.epoll_events, next,
408 eloop.epoll_max_event_num = next;
409 eloop.epoll_events = temp_events;
413 if (eloop.count + 1 > eloop.kqueue_nevents) {
414 next = eloop.kqueue_nevents == 0 ? 8 : eloop.kqueue_nevents * 2;
423 os_free(eloop.kqueue_events);
424 eloop.kqueue_events = temp_events;
425 eloop.kqueue_nevents = next;
444 eloop.max_sock = new_max_sock;
445 eloop.count++;
452 os_memcpy(&eloop.fd_table[sock], &table->table[table->count - 1],
483 eloop.count--;
487 if (epoll_ctl(eloop.epollfd, EPOLL_CTL_DEL, sock, NULL) < 0) {
492 os_memset(&eloop.fd_table[sock], 0, sizeof(struct eloop_sock));
497 if (kevent(eloop.kqueuefd, &ke, 1, NULL, 0, NULL) < 0) {
502 os_memset(&eloop.fd_table[sock], 0, sizeof(struct eloop_sock));
696 table = &eloop.fd_table[events[i].data.fd];
701 if (eloop.readers.changed ||
702 eloop.writers.changed ||
703 eloop.exceptions.changed)
718 table = &eloop.fd_table[events[i].ident];
723 if (eloop.readers.changed ||
724 eloop.writers.changed ||
725 eloop.exceptions.changed)
751 close(eloop.kqueuefd);
752 eloop.kqueuefd = kqueue();
753 if (eloop.kqueuefd < 0) {
759 if (eloop_sock_table_requeue(&eloop.readers) < 0)
761 if (eloop_sock_table_requeue(&eloop.writers) < 0)
763 if (eloop_sock_table_requeue(&eloop.exceptions) < 0)
783 wpa_trace_dump_funcname("eloop unregistered socket "
786 wpa_trace_dump("eloop sock", &table->table[i]);
811 return &eloop.readers;
813 return &eloop.writers;
815 return &eloop.exceptions;
878 wpa_trace_add_ref(timeout, eloop, eloop_data);
885 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) {
895 dl_list_add_tail(&eloop.timeout, &timeout->list);
911 wpa_trace_remove_ref(timeout, eloop, timeout->eloop_data);
926 dl_list_for_each_safe(timeout, prev, &eloop.timeout,
953 dl_list_for_each_safe(timeout, prev, &eloop.timeout,
976 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) {
1000 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) {
1032 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) {
1060 wpa_printf(MSG_ERROR, "eloop: could not process SIGINT or SIGTERM in "
1075 if ((sig == SIGINT || sig == SIGTERM) && !eloop.pending_terminate) {
1078 eloop.pending_terminate = 1;
1084 eloop.signaled++;
1085 for (i = 0; i < eloop.signal_count; i++) {
1086 if (eloop.signals[i].sig == sig) {
1087 eloop.signals[i].signaled++;
1101 if (eloop.signaled == 0)
1103 eloop.signaled = 0;
1105 if (eloop.pending_terminate) {
1109 eloop.pending_terminate = 0;
1112 for (i = 0; i < eloop.signal_count; i++) {
1113 if (eloop.signals[i].signaled) {
1114 eloop.signals[i].signaled = 0;
1115 eloop.signals[i].handler(eloop.signals[i].sig,
1116 eloop.signals[i].user_data);
1127 tmp = os_realloc_array(eloop.signals, eloop.signal_count + 1,
1132 tmp[eloop.signal_count].sig = sig;
1133 tmp[eloop.signal_count].user_data = user_data;
1134 tmp[eloop.signal_count].handler = handler;
1135 tmp[eloop.signal_count].signaled = 0;
1136 eloop.signal_count++;
1137 eloop.signals = tmp;
1192 while (!eloop.terminate &&
1193 (!dl_list_empty(&eloop.timeout) || eloop.readers.count > 0 ||
1194 eloop.writers.count > 0 || eloop.exceptions.count > 0)) {
1197 if (eloop.pending_terminate) {
1206 if (eloop.terminate)
1210 timeout = dl_list_first(&eloop.timeout, struct eloop_timeout,
1233 &eloop.readers, &eloop.writers, &eloop.exceptions,
1234 eloop.pollfds, eloop.pollfds_map,
1235 eloop.max_pollfd_map);
1236 res = poll(eloop.pollfds, num_poll_fds,
1240 eloop_sock_table_set_fds(&eloop.readers, rfds);
1241 eloop_sock_table_set_fds(&eloop.writers, wfds);
1242 eloop_sock_table_set_fds(&eloop.exceptions, efds);
1243 res = select(eloop.max_sock + 1, rfds, wfds, efds,
1247 if (eloop.count == 0) {
1250 res = epoll_wait(eloop.epollfd, eloop.epoll_events,
1251 eloop.count, timeout_ms);
1255 if (eloop.count == 0) {
1258 res = kevent(eloop.kqueuefd, NULL, 0,
1259 eloop.kqueue_events, eloop.kqueue_nevents,
1264 wpa_printf(MSG_ERROR, "eloop: %s: %s",
1282 eloop.readers.changed = 0;
1283 eloop.writers.changed = 0;
1284 eloop.exceptions.changed = 0;
1290 timeout = dl_list_first(&eloop.timeout, struct eloop_timeout,
1308 if (eloop.readers.changed ||
1309 eloop.writers.changed ||
1310 eloop.exceptions.changed) {
1322 eloop_sock_table_dispatch(&eloop.readers, &eloop.writers,
1323 &eloop.exceptions, eloop.pollfds_map,
1324 eloop.max_pollfd_map);
1327 eloop_sock_table_dispatch(&eloop.readers, rfds);
1328 eloop_sock_table_dispatch(&eloop.writers, wfds);
1329 eloop_sock_table_dispatch(&eloop.exceptions, efds);
1332 eloop_sock_table_dispatch(eloop.epoll_events, res);
1335 eloop_sock_table_dispatch(eloop.kqueue_events, res);
1339 eloop.terminate = 0;
1352 eloop.terminate = 1;
1362 dl_list_for_each_safe(timeout, prev, &eloop.timeout,
1375 wpa_trace_dump_funcname("eloop unregistered timeout handler",
1377 wpa_trace_dump("eloop timeout", timeout);
1383 eloop_sock_table_destroy(&eloop.readers);
1384 eloop_sock_table_destroy(&eloop.writers);
1385 eloop_sock_table_destroy(&eloop.exceptions);
1386 os_free(eloop.signals);
1389 os_free(eloop.pollfds);
1390 os_free(eloop.pollfds_map);
1393 os_free(eloop.fd_table);
1396 os_free(eloop.epoll_events);
1397 close(eloop.epollfd);
1400 os_free(eloop.kqueue_events);
1401 close(eloop.kqueuefd);
1408 return eloop.terminate || eloop.pending_terminate;