diff --git a/nsock/src/nsock_core.c b/nsock/src/nsock_core.c index ec38cad..aac2c1b 100644 --- a/nsock/src/nsock_core.c +++ b/nsock/src/nsock_core.c @@ -1230,6 +1230,14 @@ void nsp_add_event(mspool *nsp, msevent *nse) { assert(0); break; /* unreached */ } + + /* It can happen that the event already completed. In which case we can + * * already deliver it, even though we're probably not inside nsock_loop(). */ + if (nse->event_done) { + msevent_dispatch_and_delete(nsp, nse, 1); + update_first_events(nse); + + } } /* An event has been completed and the handler is about to be called. This