Home | History | Annotate | Download | only in utils

Lines Matching refs:eloop

15 #include "eloop.h"
38 WPA_TRACE_REF(eloop);
49 WPA_TRACE_REF(eloop);
102 static struct eloop_data eloop;
109 wpa_trace_show("eloop SIGSEGV");
119 wpa_trace_add_ref(&table->table[i], eloop,
133 wpa_trace_remove_ref(&table->table[i], eloop,
150 os_memset(&eloop, 0, sizeof(eloop));
151 dl_list_init(&eloop.timeout);
153 eloop.epollfd = epoll_create1(0);
154 if (eloop.epollfd < 0) {
159 eloop.readers.type = EVENT_TYPE_READ;
160 eloop.writers.type = EVENT_TYPE_WRITE;
161 eloop.exceptions.type = EVENT_TYPE_EXCEPTION;
182 if (sock > eloop.max_sock)
185 new_max_sock = eloop.max_sock;
191 if (new_max_sock >= eloop.max_pollfd_map) {
193 nmap = os_realloc_array(eloop.pollfds_map, new_max_sock + 50,
198 eloop.max_pollfd_map = new_max_sock + 50;
199 eloop.pollfds_map = nmap;
202 if (eloop.count + 1 > eloop.max_poll_fds) {
204 int nmax = eloop.count + 1 + 50;
205 n = os_realloc_array(eloop.pollfds, nmax,
210 eloop.max_poll_fds = nmax;
211 eloop.pollfds = n;
215 if (new_max_sock >= eloop.epoll_max_fd) {
216 next = eloop.epoll_max_fd == 0 ? 16 : eloop.epoll_max_fd * 2;
217 temp_table = os_realloc_array(eloop.epoll_table, next,
222 eloop.epoll_max_fd = next;
223 eloop.epoll_table = temp_table;
226 if (eloop.count + 1 > eloop.epoll_max_event_num) {
227 next = eloop.epoll_max_event_num == 0 ? 8 :
228 eloop.epoll_max_event_num * 2;
229 temp_events = os_realloc_array(eloop.epoll_events, next,
237 eloop.epoll_max_event_num = next;
238 eloop.epoll_events = temp_events;
255 eloop.max_sock = new_max_sock;
256 eloop.count++;
281 if (epoll_ctl(eloop.epollfd, EPOLL_CTL_ADD, sock, &ev) < 0) {
286 os_memcpy(&eloop.epoll_table[sock], &table->table[table->count - 1],
314 eloop.count--;
320 if (epoll_ctl(eloop.epollfd, EPOLL_CTL_DEL, sock, NULL) < 0) {
325 os_memset(&eloop.epoll_table[sock], 0, sizeof(struct eloop_sock));
519 table = &eloop.epoll_table[events[i].data.fd];
534 wpa_printf(MSG_INFO, "ELOOP: remaining socket: "
541 wpa_trace_dump_funcname("eloop unregistered socket "
544 wpa_trace_dump("eloop sock", &table->table[i]);
569 return &eloop.readers;
571 return &eloop.writers;
573 return &eloop.exceptions;
623 wpa_printf(MSG_DEBUG, "ELOOP: Too long timeout (secs=%u) to "
636 wpa_trace_add_ref(timeout, eloop, eloop_data);
641 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) {
647 dl_list_add_tail(&eloop.timeout, &timeout->list);
656 wpa_trace_remove_ref(timeout, eloop, timeout->eloop_data);
668 dl_list_for_each_safe(timeout, prev, &eloop.timeout,
695 dl_list_for_each_safe(timeout, prev, &eloop.timeout,
716 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) {
734 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) {
766 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) {
794 wpa_printf(MSG_ERROR, "eloop: could not process SIGINT or SIGTERM in "
809 if ((sig == SIGINT || sig == SIGTERM) && !eloop.pending_terminate) {
812 eloop.pending_terminate = 1;
818 eloop.signaled++;
819 for (i = 0; i < eloop.signal_count; i++) {
820 if (eloop.signals[i].sig == sig) {
821 eloop.signals[i].signaled++;
832 if (eloop.signaled == 0)
834 eloop.signaled = 0;
836 if (eloop.pending_terminate) {
840 eloop.pending_terminate = 0;
843 for (i = 0; i < eloop.signal_count; i++) {
844 if (eloop.signals[i].signaled) {
845 eloop.signals[i].signaled = 0;
846 eloop.signals[i].handler(eloop.signals[i].sig,
847 eloop.signals[i].user_data);
858 tmp = os_realloc_array(eloop.signals, eloop.signal_count + 1,
863 tmp[eloop.signal_count].sig = sig;
864 tmp[eloop.signal_count].user_data = user_data;
865 tmp[eloop.signal_count].handler = handler;
866 tmp[eloop.signal_count].signaled = 0;
867 eloop.signal_count++;
868 eloop.signals = tmp;
920 while (!eloop.terminate &&
921 (!dl_list_empty(&eloop.timeout) || eloop.readers.count > 0 ||
922 eloop.writers.count > 0 || eloop.exceptions.count > 0)) {
924 timeout = dl_list_first(&eloop.timeout, struct eloop_timeout,
943 &eloop.readers, &eloop.writers, &eloop.exceptions,
944 eloop.pollfds, eloop.pollfds_map,
945 eloop.max_pollfd_map);
946 res = poll(eloop.pollfds, num_poll_fds,
950 eloop_sock_table_set_fds(&eloop.readers, rfds);
951 eloop_sock_table_set_fds(&eloop.writers, wfds);
952 eloop_sock_table_set_fds(&eloop.exceptions, efds);
953 res = select(eloop.max_sock + 1, rfds, wfds, efds,
957 if (eloop.count == 0) {
960 res = epoll_wait(eloop.epollfd, eloop.epoll_events,
961 eloop.count, timeout_ms);
965 wpa_printf(MSG_ERROR, "eloop: %s: %s",
981 timeout = dl_list_first(&eloop.timeout, struct eloop_timeout,
1000 eloop_sock_table_dispatch(&eloop.readers, &eloop.writers,
1001 &eloop.exceptions, eloop.pollfds_map,
1002 eloop.max_pollfd_map);
1005 eloop_sock_table_dispatch(&eloop.readers, rfds);
1006 eloop_sock_table_dispatch(&eloop.writers, wfds);
1007 eloop_sock_table_dispatch(&eloop.exceptions, efds);
1010 eloop_sock_table_dispatch(eloop.epoll_events, res);
1014 eloop.terminate = 0;
1027 eloop.terminate = 1;
1037 dl_list_for_each_safe(timeout, prev, &eloop.timeout,
1046 wpa_printf(MSG_INFO, "ELOOP: remaining timeout: %d.%06d "
1050 wpa_trace_dump_funcname("eloop unregistered timeout handler",
1052 wpa_trace_dump("eloop timeout", timeout);
1055 eloop_sock_table_destroy(&eloop.readers);
1056 eloop_sock_table_destroy(&eloop.writers);
1057 eloop_sock_table_destroy(&eloop.exceptions);
1058 os_free(eloop.signals);
1061 os_free(eloop.pollfds);
1062 os_free(eloop.pollfds_map);
1065 os_free(eloop.epoll_table);
1066 os_free(eloop.epoll_events);
1067 close(eloop.epollfd);
1074 return eloop.terminate;