diff --git a/util/async.c b/util/async.c index 38c53c2..a8094aa 100644 --- a/util/async.c +++ b/util/async.c @@ -60,6 +60,8 @@ HRESULT async_submit(struct async *async, struct irp *irp, async_task_t task) return task(async->ctx, irp); } + EnterCriticalSection(&async->lock); + if (async->thread == NULL) { /* Ensure our worker thread is running */ async->thread = (HANDLE) _beginthreadex( @@ -75,8 +77,6 @@ HRESULT async_submit(struct async *async, struct irp *irp, async_task_t task) } } - EnterCriticalSection(&async->lock); - while (async->task != NULL) { ok = SleepConditionVariableCS(&async->avail, &async->lock, INFINITE);