Lines Matching +full:timeout +full:- +full:sec
3 * Copyright (c) 2002-2009, Jouni Malinen <j@w1.fi>
105 struct dl_list timeout; member
130 if (table == NULL || table->table == NULL) in eloop_trace_sock_add_ref()
132 for (i = 0; i < table->count; i++) { in eloop_trace_sock_add_ref()
133 wpa_trace_add_ref(&table->table[i], eloop, in eloop_trace_sock_add_ref()
134 table->table[i].eloop_data); in eloop_trace_sock_add_ref()
135 wpa_trace_add_ref(&table->table[i], user, in eloop_trace_sock_add_ref()
136 table->table[i].user_data); in eloop_trace_sock_add_ref()
145 if (table == NULL || table->table == NULL) in eloop_trace_sock_remove_ref()
147 for (i = 0; i < table->count; i++) { in eloop_trace_sock_remove_ref()
148 wpa_trace_remove_ref(&table->table[i], eloop, in eloop_trace_sock_remove_ref()
149 table->table[i].eloop_data); in eloop_trace_sock_remove_ref()
150 wpa_trace_remove_ref(&table->table[i], user, in eloop_trace_sock_remove_ref()
151 table->table[i].user_data); in eloop_trace_sock_remove_ref()
166 dl_list_init(&eloop.timeout); in eloop_init()
172 return -1; in eloop_init()
180 return -1; in eloop_init()
221 return -1; in eloop_sock_queue()
248 if (kevent(eloop.kqueuefd, &ke, 1, NULL, 0, NULL) == -1) { in eloop_sock_queue()
251 return -1; in eloop_sock_queue()
282 return -1; in eloop_sock_table_add_sock()
290 return -1; in eloop_sock_table_add_sock()
303 return -1; in eloop_sock_table_add_sock()
315 return -1; in eloop_sock_table_add_sock()
331 return -1; in eloop_sock_table_add_sock()
346 return -1; in eloop_sock_table_add_sock()
356 tmp = os_realloc_array(table->table, table->count + 1, in eloop_sock_table_add_sock()
360 return -1; in eloop_sock_table_add_sock()
363 tmp[table->count].sock = sock; in eloop_sock_table_add_sock()
364 tmp[table->count].eloop_data = eloop_data; in eloop_sock_table_add_sock()
365 tmp[table->count].user_data = user_data; in eloop_sock_table_add_sock()
366 tmp[table->count].handler = handler; in eloop_sock_table_add_sock()
367 wpa_trace_record(&tmp[table->count]); in eloop_sock_table_add_sock()
368 table->count++; in eloop_sock_table_add_sock()
369 table->table = tmp; in eloop_sock_table_add_sock()
372 table->changed = 1; in eloop_sock_table_add_sock()
376 if (eloop_sock_queue(sock, table->type) < 0) in eloop_sock_table_add_sock()
377 return -1; in eloop_sock_table_add_sock()
378 os_memcpy(&eloop.fd_table[sock], &table->table[table->count - 1], in eloop_sock_table_add_sock()
393 if (table == NULL || table->table == NULL || table->count == 0) in eloop_sock_table_remove_sock()
396 for (i = 0; i < table->count; i++) { in eloop_sock_table_remove_sock()
397 if (table->table[i].sock == sock) in eloop_sock_table_remove_sock()
400 if (i == table->count) in eloop_sock_table_remove_sock()
403 if (i != table->count - 1) { in eloop_sock_table_remove_sock()
404 os_memmove(&table->table[i], &table->table[i + 1], in eloop_sock_table_remove_sock()
405 (table->count - i - 1) * in eloop_sock_table_remove_sock()
408 table->count--; in eloop_sock_table_remove_sock()
409 eloop.count--; in eloop_sock_table_remove_sock()
410 table->changed = 1; in eloop_sock_table_remove_sock()
421 EV_SET(&ke, sock, event_type_kevent_filter(table->type), EV_DELETE, 0, in eloop_sock_table_remove_sock()
455 /* Clear pollfd lookup map. It will be re-populated below. */ in eloop_sock_table_set_fds()
458 if (readers && readers->table) { in eloop_sock_table_set_fds()
459 for (i = 0; i < readers->count; i++) { in eloop_sock_table_set_fds()
460 fd = readers->table[i].sock; in eloop_sock_table_set_fds()
470 if (writers && writers->table) { in eloop_sock_table_set_fds()
471 for (i = 0; i < writers->count; i++) { in eloop_sock_table_set_fds()
476 fd = writers->table[i].sock; in eloop_sock_table_set_fds()
481 pfd->events = 0; in eloop_sock_table_set_fds()
482 pfd->fd = fd; in eloop_sock_table_set_fds()
487 pfd->events |= POLLOUT; in eloop_sock_table_set_fds()
496 if (exceptions && exceptions->table) { in eloop_sock_table_set_fds()
497 for (i = 0; i < exceptions->count; i++) { in eloop_sock_table_set_fds()
502 fd = exceptions->table[i].sock; in eloop_sock_table_set_fds()
507 pfd->events = POLLIN; in eloop_sock_table_set_fds()
508 pfd->fd = fd; in eloop_sock_table_set_fds()
528 if (!table || !table->table) in eloop_sock_table_dispatch_table()
531 table->changed = 0; in eloop_sock_table_dispatch_table()
532 for (i = 0; i < table->count; i++) { in eloop_sock_table_dispatch_table()
533 pfd = find_pollfd(pollfds_map, table->table[i].sock, in eloop_sock_table_dispatch_table()
538 if (!(pfd->revents & revents)) in eloop_sock_table_dispatch_table()
541 table->table[i].handler(table->table[i].sock, in eloop_sock_table_dispatch_table()
542 table->table[i].eloop_data, in eloop_sock_table_dispatch_table()
543 table->table[i].user_data); in eloop_sock_table_dispatch_table()
544 if (table->changed) in eloop_sock_table_dispatch_table()
582 if (table->table == NULL) in eloop_sock_table_set_fds()
585 for (i = 0; i < table->count; i++) { in eloop_sock_table_set_fds()
586 assert(table->table[i].sock >= 0); in eloop_sock_table_set_fds()
587 FD_SET(table->table[i].sock, fds); in eloop_sock_table_set_fds()
597 if (table == NULL || table->table == NULL) in eloop_sock_table_dispatch()
600 table->changed = 0; in eloop_sock_table_dispatch()
601 for (i = 0; i < table->count; i++) { in eloop_sock_table_dispatch()
602 if (FD_ISSET(table->table[i].sock, fds)) { in eloop_sock_table_dispatch()
603 table->table[i].handler(table->table[i].sock, in eloop_sock_table_dispatch()
604 table->table[i].eloop_data, in eloop_sock_table_dispatch()
605 table->table[i].user_data); in eloop_sock_table_dispatch()
606 if (table->changed) in eloop_sock_table_dispatch()
623 if (table->handler == NULL) in eloop_sock_table_dispatch()
625 table->handler(table->sock, table->eloop_data, in eloop_sock_table_dispatch()
626 table->user_data); in eloop_sock_table_dispatch()
645 if (table->handler == NULL) in eloop_sock_table_dispatch()
647 table->handler(table->sock, table->eloop_data, in eloop_sock_table_dispatch()
648 table->user_data); in eloop_sock_table_dispatch()
663 for (i = 0; i < table->count && table->table; i++) { in eloop_sock_table_requeue()
664 if (eloop_sock_queue(table->table[i].sock, table->type) == -1) in eloop_sock_table_requeue()
665 r = -1; in eloop_sock_table_requeue()
683 return -1; in eloop_sock_requeue()
687 r = -1; in eloop_sock_requeue()
689 r = -1; in eloop_sock_requeue()
691 r = -1; in eloop_sock_requeue()
703 for (i = 0; i < table->count && table->table; i++) { in eloop_sock_table_destroy()
707 table->table[i].sock, in eloop_sock_table_destroy()
708 table->table[i].eloop_data, in eloop_sock_table_destroy()
709 table->table[i].user_data, in eloop_sock_table_destroy()
710 table->table[i].handler); in eloop_sock_table_destroy()
713 table->table[i].handler); in eloop_sock_table_destroy()
714 wpa_trace_dump("eloop sock", &table->table[i]); in eloop_sock_table_destroy()
716 os_free(table->table); in eloop_sock_table_destroy()
776 struct eloop_timeout *timeout, *tmp; in eloop_register_timeout() local
779 timeout = os_zalloc(sizeof(*timeout)); in eloop_register_timeout()
780 if (timeout == NULL) in eloop_register_timeout()
781 return -1; in eloop_register_timeout()
782 if (os_get_reltime(&timeout->time) < 0) { in eloop_register_timeout()
783 os_free(timeout); in eloop_register_timeout()
784 return -1; in eloop_register_timeout()
786 now_sec = timeout->time.sec; in eloop_register_timeout()
787 timeout->time.sec += secs; in eloop_register_timeout()
788 if (timeout->time.sec < now_sec) in eloop_register_timeout()
790 timeout->time.usec += usecs; in eloop_register_timeout()
791 while (timeout->time.usec >= 1000000) { in eloop_register_timeout()
792 timeout->time.sec++; in eloop_register_timeout()
793 timeout->time.usec -= 1000000; in eloop_register_timeout()
795 if (timeout->time.sec < now_sec) in eloop_register_timeout()
797 timeout->eloop_data = eloop_data; in eloop_register_timeout()
798 timeout->user_data = user_data; in eloop_register_timeout()
799 timeout->handler = handler; in eloop_register_timeout()
800 wpa_trace_add_ref(timeout, eloop, eloop_data); in eloop_register_timeout()
801 wpa_trace_add_ref(timeout, user, user_data); in eloop_register_timeout()
802 wpa_trace_record(timeout); in eloop_register_timeout()
805 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) { in eloop_register_timeout()
806 if (os_reltime_before(&timeout->time, &tmp->time)) { in eloop_register_timeout()
807 dl_list_add(tmp->list.prev, &timeout->list); in eloop_register_timeout()
811 dl_list_add_tail(&eloop.timeout, &timeout->list); in eloop_register_timeout()
817 * Integer overflow - assume long enough timeout to be assumed in eloop_register_timeout()
818 * to be infinite, i.e., the timeout would never happen. in eloop_register_timeout()
821 "ELOOP: Too long timeout (secs=%u usecs=%u) to ever happen - ignore it", in eloop_register_timeout()
823 os_free(timeout); in eloop_register_timeout()
828 static void eloop_remove_timeout(struct eloop_timeout *timeout) in eloop_remove_timeout() argument
830 dl_list_del(&timeout->list); in eloop_remove_timeout()
831 wpa_trace_remove_ref(timeout, eloop, timeout->eloop_data); in eloop_remove_timeout()
832 wpa_trace_remove_ref(timeout, user, timeout->user_data); in eloop_remove_timeout()
833 os_free(timeout); in eloop_remove_timeout()
840 struct eloop_timeout *timeout, *prev; in eloop_cancel_timeout() local
843 dl_list_for_each_safe(timeout, prev, &eloop.timeout, in eloop_cancel_timeout()
845 if (timeout->handler == handler && in eloop_cancel_timeout()
846 (timeout->eloop_data == eloop_data || in eloop_cancel_timeout()
848 (timeout->user_data == user_data || in eloop_cancel_timeout()
850 eloop_remove_timeout(timeout); in eloop_cancel_timeout()
863 struct eloop_timeout *timeout, *prev; in eloop_cancel_timeout_one() local
868 remaining->sec = remaining->usec = 0; in eloop_cancel_timeout_one()
870 dl_list_for_each_safe(timeout, prev, &eloop.timeout, in eloop_cancel_timeout_one()
872 if (timeout->handler == handler && in eloop_cancel_timeout_one()
873 (timeout->eloop_data == eloop_data) && in eloop_cancel_timeout_one()
874 (timeout->user_data == user_data)) { in eloop_cancel_timeout_one()
876 if (os_reltime_before(&now, &timeout->time)) in eloop_cancel_timeout_one()
877 os_reltime_sub(&timeout->time, &now, remaining); in eloop_cancel_timeout_one()
878 eloop_remove_timeout(timeout); in eloop_cancel_timeout_one()
891 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) { in eloop_is_timeout_registered()
892 if (tmp->handler == handler && in eloop_is_timeout_registered()
893 tmp->eloop_data == eloop_data && in eloop_is_timeout_registered()
894 tmp->user_data == user_data) in eloop_is_timeout_registered()
909 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) { in eloop_deplete_timeout()
910 if (tmp->handler == handler && in eloop_deplete_timeout()
911 tmp->eloop_data == eloop_data && in eloop_deplete_timeout()
912 tmp->user_data == user_data) { in eloop_deplete_timeout()
913 requested.sec = req_secs; in eloop_deplete_timeout()
916 os_reltime_sub(&tmp->time, &now, &remaining); in eloop_deplete_timeout()
920 eloop_register_timeout(requested.sec, in eloop_deplete_timeout()
930 return -1; in eloop_deplete_timeout()
941 dl_list_for_each(tmp, &eloop.timeout, struct eloop_timeout, list) { in eloop_replenish_timeout()
942 if (tmp->handler == handler && in eloop_replenish_timeout()
943 tmp->eloop_data == eloop_data && in eloop_replenish_timeout()
944 tmp->user_data == user_data) { in eloop_replenish_timeout()
945 requested.sec = req_secs; in eloop_replenish_timeout()
948 os_reltime_sub(&tmp->time, &now, &remaining); in eloop_replenish_timeout()
952 eloop_register_timeout(requested.sec, in eloop_replenish_timeout()
962 return -1; in eloop_replenish_timeout()
1036 return -1; in eloop_register_signal()
1082 int timeout_ms = -1; in eloop_run()
1099 (!dl_list_empty(&eloop.timeout) || eloop.readers.count > 0 || in eloop_run()
1101 struct eloop_timeout *timeout; in eloop_run() local
1116 timeout = dl_list_first(&eloop.timeout, struct eloop_timeout, in eloop_run()
1118 if (timeout) { in eloop_run()
1120 if (os_reltime_before(&now, &timeout->time)) in eloop_run()
1121 os_reltime_sub(&timeout->time, &now, &tv); in eloop_run()
1123 tv.sec = tv.usec = 0; in eloop_run()
1125 timeout_ms = tv.sec * 1000 + tv.usec / 1000; in eloop_run()
1128 _tv.tv_sec = tv.sec; in eloop_run()
1132 ts.tv_sec = tv.sec; in eloop_run()
1143 timeout ? timeout_ms : -1); in eloop_run()
1150 timeout ? &_tv : NULL); in eloop_run()
1166 timeout ? &ts : NULL); in eloop_run()
1196 timeout = dl_list_first(&eloop.timeout, struct eloop_timeout, in eloop_run()
1198 if (timeout) { in eloop_run()
1200 if (!os_reltime_before(&now, &timeout->time)) { in eloop_run()
1201 void *eloop_data = timeout->eloop_data; in eloop_run()
1202 void *user_data = timeout->user_data; in eloop_run()
1204 timeout->handler; in eloop_run()
1205 eloop_remove_timeout(timeout); in eloop_run()
1219 * same FD in the signal or timeout handlers, so we in eloop_run()
1264 struct eloop_timeout *timeout, *prev; in eloop_destroy() local
1268 dl_list_for_each_safe(timeout, prev, &eloop.timeout, in eloop_destroy()
1270 int sec, usec; in eloop_destroy() local
1271 sec = timeout->time.sec - now.sec; in eloop_destroy()
1272 usec = timeout->time.usec - now.usec; in eloop_destroy()
1273 if (timeout->time.usec < now.usec) { in eloop_destroy()
1274 sec--; in eloop_destroy()
1277 wpa_printf(MSG_INFO, "ELOOP: remaining timeout: %d.%06d " in eloop_destroy()
1279 sec, usec, timeout->eloop_data, timeout->user_data, in eloop_destroy()
1280 timeout->handler); in eloop_destroy()
1281 wpa_trace_dump_funcname("eloop unregistered timeout handler", in eloop_destroy()
1282 timeout->handler); in eloop_destroy()
1283 wpa_trace_dump("eloop timeout", timeout); in eloop_destroy()
1284 eloop_remove_timeout(timeout); in eloop_destroy()
1327 poll(&pfd, 1, -1); in eloop_wait_for_read_sock()
1349 if (kfd == -1) in eloop_wait_for_read_sock()