From c0c778e885e56773fecde9538ca89e53edfe2280 Mon Sep 17 00:00:00 2001 From: tokenjunkielabs Date: Sun, 20 Sep 2026 22:39:37 -0400 Subject: [PATCH] dnsthread: register wakeup listener before starting work --- lib/dnsthread/dnsthread.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/dnsthread/dnsthread.c b/lib/dnsthread/dnsthread.c index 1733b6f8..b8af4db5 100644 --- a/lib/dnsthread/dnsthread.c +++ b/lib/dnsthread/dnsthread.c @@ -265,20 +265,20 @@ dnsthread_resolveone(DNSTHREAD T, const char * addr, T->callback = callback; T->cookie = cookie; + /* We want a callback when the worker thread pokes us. */ + if (events_network_register(callback_resolveone, T, T->wakeupsock[1], + EVENTS_NETWORK_OP_READ)) { + warnp("Error registering wakeup listener"); + goto err2; + } + /* There is now work for the thread to do. */ T->state = THREAD_HASWORK; /* Wake up the worker thread. */ if ((rc = pthread_cond_signal(&T->cv)) != 0) { warn0("pthread_cond_signal: %s", strerror(rc)); - goto err1; - } - - /* We want a callback when the worker thread pokes us. */ - if (events_network_register(callback_resolveone, T, T->wakeupsock[1], - EVENTS_NETWORK_OP_READ)) { - warnp("Error registering wakeup listener"); - goto err1; + goto err3; } ealready: @@ -295,6 +295,11 @@ dnsthread_resolveone(DNSTHREAD T, const char * addr, /* Success! */ return (0); +err3: + T->state = THREAD_SLEEPING; + events_network_cancel(T->wakeupsock[1], EVENTS_NETWORK_OP_READ); +err2: + free(T->addr); err1: pthread_mutex_unlock(&T->mtx); err0: