From 55176ca91ec050741d42d9be5e48967eab4e94d7 Mon Sep 17 00:00:00 2001 From: midipix Date: Jul 06 2020 06:37:03 +0000 Subject: daemon: toks_daemon_cancel(): reimplement using correct & simplified logic. --- diff --git a/src/daemon/toks_daemon_cancel.c b/src/daemon/toks_daemon_cancel.c index 548369b..9c27f5b 100644 --- a/src/daemon/toks_daemon_cancel.c +++ b/src/daemon/toks_daemon_cancel.c @@ -16,46 +16,30 @@ int32_t __stdcall toks_daemon_cancel(struct toks_daemon_ctx * dctx) nt_tty_port_msg * msg; nt_cid * cid; struct toks_waiter * waiter; - struct toks_waiter * waitcap; int nwaiters; + int idx; - msg = &dctx->reply; - cid = &msg->header.client_id; - nwaiters = toks_get_driver_nwaiters(dctx->driver_ctx); - - if (nwaiters == 0) + if ((nwaiters = toks_get_driver_nwaiters(dctx->driver_ctx)) == 0) return NT_STATUS_NOT_FOUND; + idx = 0; + msg = &dctx->reply; + cid = &msg->header.client_id; waiter = dctx->waiter_first; - waitcap = &waiter[nwaiters]; - - if (waitcap > dctx->waiter_cap) - waitcap = dctx->waiter_cap; - for (; waitermsg.header.client_id.process_id == cid->process_id) { if (waiter->msg.header.client_id.thread_id == cid->thread_id) { - waiter->msg.header.msg_id = 0; - toks_set_driver_nwaiters(dctx->driver_ctx,--nwaiters); - return NT_STATUS_CANCELLED; + if (waiter->msg.header.msg_id) { + waiter->msg.header.msg_id = 0; + toks_set_driver_nwaiters(dctx->driver_ctx,--nwaiters); + return NT_STATUS_CANCELLED; + } } } - } - - if (nwaiters < (dctx->waiter_cap - dctx->waiter_first)) - return NT_STATUS_NOT_FOUND; - waiter = dctx->waiter_base; - waitcap = &waiter[nwaiters - (dctx->waiter_cap-dctx->waiter_first)]; - - for (; waitermsg.header.client_id.process_id == cid->process_id) { - if (waiter->msg.header.client_id.thread_id == cid->thread_id) { - waiter->msg.header.msg_id = 0; - toks_set_driver_nwaiters(dctx->driver_ctx,--nwaiters); - return NT_STATUS_CANCELLED; - } - } + if (++waiter == dctx->waiter_cap) + waiter = dctx->waiter_base; } return NT_STATUS_NOT_FOUND;