diff --git a/src/Driver/EncryptedIoQueue.c b/src/Driver/EncryptedIoQueue.c index 7e9aaa61..bf11092d 100644 --- a/src/Driver/EncryptedIoQueue.c +++ b/src/Driver/EncryptedIoQueue.c @@ -1263,7 +1263,7 @@ retry_preallocated: KeInitializeSpinLock (&queue->CompletionThreadQueueLock); KeInitializeEvent (&queue->CompletionThreadQueueNotEmptyEvent, SynchronizationEvent, FALSE); - status = TCStartThread (CompletionThreadProc, queue, &queue->CompletionThreads[0]); + status = TCStartThread (CompletionThreadProc, queue, &queue->CompletionThread); if (!NT_SUCCESS (status)) { queue->ThreadExitRequested = TRUE; @@ -1272,16 +1272,6 @@ retry_preallocated: goto err; } - status = TCStartThread (CompletionThreadProc, queue, &queue->CompletionThreads[1]); - if (!NT_SUCCESS (status)) - { - queue->ThreadExitRequested = TRUE; - TCStopThread (queue->MainThread, &queue->MainThreadQueueNotEmptyEvent); - TCStopThread (queue->IoThread, &queue->IoThreadQueueNotEmptyEvent); - TCStopThread (queue->CompletionThreads[0], &queue->CompletionThreadQueueNotEmptyEvent); - goto err; - } - #ifdef TC_TRACE_IO_QUEUE GetElapsedTimeInit (&queue->LastPerformanceCounter); #endif @@ -1326,8 +1316,7 @@ NTSTATUS EncryptedIoQueueStop (EncryptedIoQueue *queue) TCStopThread (queue->MainThread, &queue->MainThreadQueueNotEmptyEvent); TCStopThread (queue->IoThread, &queue->IoThreadQueueNotEmptyEvent); - TCStopThread (queue->CompletionThreads[0], &queue->CompletionThreadQueueNotEmptyEvent); - TCStopThread (queue->CompletionThreads[1], &queue->CompletionThreadQueueNotEmptyEvent); + TCStopThread (queue->CompletionThread, &queue->CompletionThreadQueueNotEmptyEvent); // Wait for active work items to complete KeResetEvent(&queue->NoActiveWorkItemsEvent); diff --git a/src/Driver/EncryptedIoQueue.h b/src/Driver/EncryptedIoQueue.h index 35abf7f9..e3e19d37 100644 --- a/src/Driver/EncryptedIoQueue.h +++ b/src/Driver/EncryptedIoQueue.h @@ -86,8 +86,8 @@ typedef struct KSPIN_LOCK IoThreadQueueLock; KEVENT IoThreadQueueNotEmptyEvent; - // Completion threads - PKTHREAD CompletionThreads[2]; // two threads to handle completions + // Completion thread + PKTHREAD CompletionThread; LIST_ENTRY CompletionThreadQueue; KSPIN_LOCK CompletionThreadQueueLock; KEVENT CompletionThreadQueueNotEmptyEvent;