Lines Matching refs:table
63 struct eloop_sock *table;
74 int count; /* sum of all table counts */
113 static void eloop_trace_sock_add_ref(struct eloop_sock_table *table)
116 if (table == NULL || table->table == NULL)
118 for (i = 0; i < table->count; i++) {
119 wpa_trace_add_ref(&table->table[i], eloop,
120 table->table[i].eloop_data);
121 wpa_trace_add_ref(&table->table[i], user,
122 table->table[i].user_data);
127 static void eloop_trace_sock_remove_ref(struct eloop_sock_table *table)
130 if (table == NULL || table->table == NULL)
132 for (i = 0; i < table->count; i++) {
133 wpa_trace_remove_ref(&table->table[i], eloop,
134 table->table[i].eloop_data);
135 wpa_trace_remove_ref(&table->table[i], user,
136 table->table[i].user_data);
142 #define eloop_trace_sock_add_ref(table) do { } while (0)
143 #define eloop_trace_sock_remove_ref(table) do { } while (0)
170 static int eloop_sock_table_add_sock(struct eloop_sock_table *table,
187 if (table == NULL)
242 eloop_trace_sock_remove_ref(table);
243 tmp = os_realloc_array(table->table, table->count + 1,
248 tmp[table->count].sock = sock;
249 tmp[table->count].eloop_data = eloop_data;
250 tmp[table->count].user_data = user_data;
251 tmp[table->count].handler = handler;
252 wpa_trace_record(&tmp[table->count]);
253 table->count++;
254 table->table = tmp;
258 table->changed = 1;
260 eloop_trace_sock_add_ref(table);
264 switch (table->type) {
286 os_memcpy(&eloop.epoll_table[sock], &table->table[table->count - 1],
293 static void eloop_sock_table_remove_sock(struct eloop_sock_table *table,
298 if (table == NULL || table->table == NULL || table->count == 0)
301 for (i = 0; i < table->count; i++) {
302 if (table->table[i].sock == sock)
305 if (i == table->count)
307 eloop_trace_sock_remove_ref(table);
308 if (i != table->count - 1) {
309 os_memmove(&table->table[i], &table->table[i + 1],
310 (table->count - i - 1) *
313 table->count--;
316 table->changed = 1;
318 eloop_trace_sock_add_ref(table);
355 if (readers && readers->table) {
357 fd = readers->table[i].sock;
367 if (writers && writers->table) {
373 fd = writers->table[i].sock;
393 if (exceptions && exceptions->table) {
399 fd = exceptions->table[i].sock;
417 static int eloop_sock_table_dispatch_table(struct eloop_sock_table *table,
425 if (!table || !table->table)
428 table->changed = 0;
429 for (i = 0; i < table->count; i++) {
430 pfd = find_pollfd(pollfds_map, table->table[i].sock,
438 table->table[i].handler(table->table[i].sock,
439 table->table[i].eloop_data,
440 table->table[i].user_data);
441 if (table->changed)
472 static void eloop_sock_table_set_fds(struct eloop_sock_table *table,
479 if (table->table == NULL)
482 for (i = 0; i < table->count; i++) {
483 assert(table->table[i].sock >= 0);
484 FD_SET(table->table[i].sock, fds);
489 static void eloop_sock_table_dispatch(struct eloop_sock_table *table,
494 if (table == NULL || table->table == NULL)
497 table->changed = 0;
498 for (i = 0; i < table->count; i++) {
499 if (FD_ISSET(table->table[i].sock, fds)) {
500 table->table[i].handler(table->table[i].sock,
501 table->table[i].eloop_data,
502 table->table[i].user_data);
503 if (table->changed)
515 struct eloop_sock *table;
519 table = &eloop.epoll_table[events[i].data.fd];
520 if (table->handler == NULL)
522 table->handler(table->sock, table->eloop_data,
523 table->user_data);
529 static void eloop_sock_table_destroy(struct eloop_sock_table *table)
531 if (table) {
533 for (i = 0; i < table->count && table->table; i++) {
537 table->table[i].sock,
538 table->table[i].eloop_data,
539 table->table[i].user_data,
540 table->table[i].handler);
543 table->table[i].handler);
544 wpa_trace_dump("eloop sock", &table->table[i]);
546 os_free(table->table);
584 struct eloop_sock_table *table;
587 table = eloop_get_sock_table(type);
588 return eloop_sock_table_add_sock(table, sock, handler,
595 struct eloop_sock_table *table;
597 table = eloop_get_sock_table(type);
598 eloop_sock_table_remove_sock(table, sock);