Browse Source

uasync: добавить отладку poll→fd/rev, timer→имя при разрешении событий

etcp-inflight-fix
Evgeny 4 months ago
parent
commit
c56ec0b0ed
  1. 11
      lib/u_async.c

11
lib/u_async.c

@ -450,6 +450,7 @@ static void process_timeouts(struct UASYNC* ua) {
} }
if (node && node->callback) { if (node && node->callback) {
DEBUG_DEBUG(DEBUG_CATEGORY_UASYNC, "timer→immediate %s", node->name[0] ? node->name : "");
node->callback(node->arg); node->callback(node->arg);
} }
@ -475,7 +476,7 @@ static void process_timeouts(struct UASYNC* ua) {
struct timeout_node* node = (struct timeout_node*)entry.data; struct timeout_node* node = (struct timeout_node*)entry.data;
if (node && node->callback) { if (node && node->callback) {
// Execute callback only if not cancelled DEBUG_DEBUG(DEBUG_CATEGORY_UASYNC, "timer→%s expired", node->name[0] ? node->name : "");
node->callback(node->arg); node->callback(node->arg);
} }
@ -920,6 +921,8 @@ static void process_epoll_events(struct UASYNC* ua, struct epoll_event* events,
// Socket event — save node fields locally: callbacks may realloc // Socket event — save node fields locally: callbacks may realloc
// the socket array, invalidating `node`. // the socket array, invalidating `node`.
struct socket_node* node = socket_array_get(ua->sockets, events[i].data.fd); struct socket_node* node = socket_array_get(ua->sockets, events[i].data.fd);
DEBUG_DEBUG(DEBUG_CATEGORY_UASYNC, "poll→fd=%d ev=0x%x%s", events[i].data.fd, events[i].events,
!node || !node->active ? " (inactive)" : "");
if (!node || !node->active) continue; if (!node || !node->active) continue;
int local_fd = node->fd; int local_fd = node->fd;
socket_t local_sock = node->sock; socket_t local_sock = node->sock;
@ -972,7 +975,9 @@ void uasync_poll(struct UASYNC* ua, int timeout_tb) {
if (!ua) return; if (!ua) return;
if (!ua->sockets || !ua->timeout_heap) return; if (!ua->sockets || !ua->timeout_heap) return;
DEBUG_DEBUG(DEBUG_CATEGORY_TIMERS, "poll"); 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,
timeout_tb >= 0 ? (timeout_tb % 10000) / 10 : 0);
// 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
@ -1136,6 +1141,7 @@ void uasync_poll(struct UASYNC* ua, int timeout_tb) {
int has_except = FD_ISSET(s, &except_fds); int has_except = FD_ISSET(s, &except_fds);
if (!has_read && !has_write && !has_except) continue; if (!has_read && !has_write && !has_except) continue;
DEBUG_DEBUG(DEBUG_CATEGORY_UASYNC, "select→fd=%d r=%d w=%d e=%d", (int)s, has_read, has_write, has_except);
if (has_except) { if (has_except) {
if (node->except_cbk) { if (node->except_cbk) {
@ -1194,6 +1200,7 @@ void uasync_poll(struct UASYNC* ua, int timeout_tb) {
if (ret > 0) { if (ret > 0) {
for (int i = 0; i < ua->poll_fds_count; i++) { for (int i = 0; i < ua->poll_fds_count; i++) {
if (ua->poll_fds[i].revents == 0) continue; if (ua->poll_fds[i].revents == 0) continue;
DEBUG_DEBUG(DEBUG_CATEGORY_UASYNC, "poll→fd=%d rev=0x%x", ua->poll_fds[i].fd, ua->poll_fds[i].revents);
/* Handle wakeup fd separately */ /* Handle wakeup fd separately */
if (wakeup_fd_present && i == 0) { if (wakeup_fd_present && i == 0) {

Loading…
Cancel
Save