From d08823a782b41fff52030adad76b2db7655462fe Mon Sep 17 00:00:00 2001 From: midipix Date: Jan 12 2021 16:05:56 +0000 Subject: daemon: toks_daemon_release(): properly alert the waiter thread. --- diff --git a/src/daemon/toks_daemon_acquire.c b/src/daemon/toks_daemon_acquire.c index 5d6fc9d..ddeaee1 100644 --- a/src/daemon/toks_daemon_acquire.c +++ b/src/daemon/toks_daemon_acquire.c @@ -41,6 +41,9 @@ static void toks_daemon_token_release(struct toks_token * token) static int32_t toks_daemon_client_wait(void * rapunzel) { + + int32_t status; + nt_ebi syncebi; struct toks_token * token; struct toks_client_ctx * client; void * hduo[2]; @@ -59,12 +62,19 @@ static int32_t toks_daemon_client_wait(void * rapunzel) NT_SYNC_NON_ALERTABLE, 0); + status = ntapi->zw_query_event( + client->halert, + NT_EVENT_BASIC_INFORMATION, + &syncebi,sizeof(syncebi), + &(size_t){0}); + + if ((status == NT_STATUS_SUCCESS) && !syncebi.signal_state) + toks_daemon_token_release(token); + ntapi->zw_close(client->hprocess); ntapi->zw_close(client->hport); ntapi->zw_close(client->halert); - toks_daemon_token_release(token); - return ntapi->zw_terminate_thread( NT_CURRENT_THREAD_HANDLE, NT_STATUS_SUCCESS); diff --git a/src/daemon/toks_daemon_release.c b/src/daemon/toks_daemon_release.c index aaedc91..39905ed 100644 --- a/src/daemon/toks_daemon_release.c +++ b/src/daemon/toks_daemon_release.c @@ -152,9 +152,12 @@ int32_t __stdcall toks_daemon_release(struct toks_daemon_ctx * dctx) toks_daemon_token_reset(token); - ntapi->zw_alert_thread(token->client.hinstance); ntapi->zw_close(token->client.hinstance); + ntapi->zw_set_event( + token->client.halert, + 0); + do { (void)0; } while (toks_daemon_unqueue(dctx));