From efde29f362bf61b66c9b373b06f35ea29dc9bfb5 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Thu, 29 Aug 2024 08:29:33 +0200 Subject: [PATCH] [winpr,utils] Set Queue_Enqueue only once In #10527 performance was measured and SetEvent did take a lot of time in these measurements. The reset is only required once though, so use a more fine grained trigger condition. --- winpr/libwinpr/utils/collections/Queue.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/winpr/libwinpr/utils/collections/Queue.c b/winpr/libwinpr/utils/collections/Queue.c index d24e1dd52..8bbdea83a 100644 --- a/winpr/libwinpr/utils/collections/Queue.c +++ b/winpr/libwinpr/utils/collections/Queue.c @@ -215,8 +215,12 @@ BOOL Queue_Enqueue(wQueue* queue, const void* obj) queue->array[queue->tail] = cnv.v; } queue->tail = (queue->tail + 1) % queue->capacity; + + const BOOL signalSet = queue->size == 0; queue->size++; - SetEvent(queue->event); + + if (signalSet) + SetEvent(queue->event); out: Queue_Unlock(queue);