|
|
|
@ -924,8 +924,7 @@ static void process_epoll_events(struct UASYNC* ua, struct epoll_event* events, |
|
|
|
int fd = (int)(events[i].data.u64 & 0xFFFFFFFF); |
|
|
|
int fd = (int)(events[i].data.u64 & 0xFFFFFFFF); |
|
|
|
uint16_t ev_gen = (uint16_t)(events[i].data.u64 >> 32); |
|
|
|
uint16_t ev_gen = (uint16_t)(events[i].data.u64 >> 32); |
|
|
|
|
|
|
|
|
|
|
|
if (fd == 0) fprintf(stderr, "DIAG EPOLL fd=0 ev=0x%x ev_gen=%u\n", events[i].events, ev_gen); |
|
|
|
if (fd == 0)
|
|
|
|
|
|
|
|
|
|
|
|
struct socket_node* node = socket_array_get(ua->sockets, fd); |
|
|
|
struct socket_node* node = socket_array_get(ua->sockets, fd); |
|
|
|
if (!node || !node->active) continue; |
|
|
|
if (!node || !node->active) continue; |
|
|
|
if (node->gen != ev_gen) { DEBUG_ERROR(DEBUG_CATEGORY_UASYNC, "EPOLL STALE fd=%d ev_gen=%u node_gen=%u — skipped", fd, ev_gen, node->gen); continue; } |
|
|
|
if (node->gen != ev_gen) { DEBUG_ERROR(DEBUG_CATEGORY_UASYNC, "EPOLL STALE fd=%d ev_gen=%u node_gen=%u — skipped", fd, ev_gen, node->gen); continue; } |
|
|
|
@ -982,10 +981,7 @@ void uasync_poll(struct UASYNC* ua, int timeout_tb) { |
|
|
|
|
|
|
|
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_UASYNC, "poll(%d sockets, %zu timers, timeout=%d.%dms)", |
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_UASYNC, "poll(%d sockets, %zu timers, timeout=%d.%dms)", |
|
|
|
ua->sockets->count, ua->timeout_heap->size, timeout_tb >= 0 ? timeout_tb / 10000 : -1, |
|
|
|
ua->sockets->count, ua->timeout_heap->size, timeout_tb >= 0 ? timeout_tb / 10000 : -1, |
|
|
|
timeout_tb >= 0 ? (timeout_tb % 10000) / 10 : 0); |
|
|
|
timeout_tb >= 0 ? (timeout_tb % 10000) / 10 : 0);
|
|
|
|
|
|
|
|
|
|
|
|
fprintf(stderr, "DIAG uasync_poll sockets=%d timers=%zu\n", ua->sockets->count, ua->timeout_heap->size); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Handle negative or zero timeout
|
|
|
|
// Handle negative or zero timeout
|
|
|
|
if (timeout_tb < 0) timeout_tb = -1; // Infinite wait
|
|
|
|
if (timeout_tb < 0) timeout_tb = -1; // Infinite wait
|
|
|
|
else if (timeout_tb == 0) timeout_tb = 0; // No wait
|
|
|
|
else if (timeout_tb == 0) timeout_tb = 0; // No wait
|
|
|
|
|