}
base->tcp_stickies = 0;
base->tcp_reinvigorated = 0;
+ verbose(VERB_CLIENT, "winsock_event inited");
return base;
}
#ifndef S_SPLINT_S
wait->tv_sec = (time_t)-1;
#endif
+ verbose(VERB_CLIENT, "winsock_event handle_timeouts");
while((rbnode_t*)(p = (struct event*)rbtree_first(base->times))
!=RBTREE_NULL) {
wait->tv_usec = p->ev_timeout.tv_usec
- now->tv_usec;
}
+ verbose(VERB_CLIENT, "winsock_event wait=%d.%6.6d",
+ (int)wait->tv_sec, (int)wait->tv_usec);
return;
}
#endif
fptr_ok(fptr_whitelist_event(p->ev_callback));
(*p->ev_callback)(p->ev_fd, EV_TIMEOUT, p->ev_arg);
}
+ verbose(VERB_CLIENT, "winsock_event wait=(-1)");
}
/** handle is_signal events and see if signalled */
int newstickies = 0;
struct timeval nultm;
+ verbose(VERB_CLIENT, "winsock_event handle_select");
+
#ifndef S_SPLINT_S
if(wait->tv_sec==(time_t)-1)
wait = NULL;
waitfor[numwait++] = base->items[i]->hEvent;
}
log_assert(numwait <= WSA_MAXIMUM_WAIT_EVENTS);
+ verbose(VERB_CLIENT, "winsock_event bmax=%d numwait=%d wait=%x "
+ "timeout=%d", base->max, numwait, (int)wait, (int)timeout);
/* do the wait */
if(numwait == 0) {
} else
startidx = ret - WSA_WAIT_EVENT_0;
}
+ verbose(VERB_CLIENT, "winsock_event wake was_timeout=%d startidx=%d",
+ was_timeout, startidx);
/* get new time after wait */
if(settime(base) < 0)
if(base->tcp_stickies)
startidx = 0; /* process all events, some are sticky */
+ verbose(VERB_CLIENT, "winsock_event signals");
+ for(i=startidx; i<numwait; i++) {
+ if(eventlist[i]->is_signal) {
+ handle_signal(eventlist[i]);
+ }
+ }
+ /* early exit - do not process network, exit quickly */
+ if(base->need_to_exit)
+ return 0;
+
+ verbose(VERB_CLIENT, "winsock_event net");
for(i=startidx; i<numwait; i++) {
short bits = 0;
/* eventlist[i] fired */
if(eventlist[i]->is_signal) {
/* not a network event at all */
- handle_signal(eventlist[i]);
continue;
}
if(WSAEnumNetworkEvents(eventlist[i]->ev_fd,
(eventlist[i]->old_events&EV_READ)?"EV_READ":"",
(eventlist[i]->old_events&EV_WRITE)?"EV_WRITE":"");
}
+ verbose(VERB_CLIENT, "winsock_event net");
if(base->tcp_reinvigorated) {
+ verbose(VERB_CLIENT, "winsock_event reinvigorated");
base->tcp_reinvigorated = 0;
newstickies = 1;
}
base->tcp_stickies = newstickies;
+ verbose(VERB_CLIENT, "winsock_event handle_select end");
return 0;
}
int event_base_loopexit(struct event_base *base,
struct timeval * ATTR_UNUSED(tv))
{
+ verbose(VERB_CLIENT, "winsock_event loopexit");
base->need_to_exit = 1;
return 0;
}
void event_base_free(struct event_base *base)
{
+ verbose(VERB_CLIENT, "winsock_event event_base_free");
if(!base)
return;
if(base->items)