diff --git a/dll/ntdll/ldr/ldrinit.c b/dll/ntdll/ldr/ldrinit.c index 5ee01e3e68d..4fbc4f293aa 100644 --- a/dll/ntdll/ldr/ldrinit.c +++ b/dll/ntdll/ldr/ldrinit.c @@ -517,6 +517,9 @@ LdrpInitializeThread(IN PCONTEXT Context) NtCurrentTeb()->RealClientId.UniqueProcess, NtCurrentTeb()->RealClientId.UniqueThread); + /* Acquire the loader Lock */ + RtlEnterCriticalSection(&LdrpLoaderLock); + /* Allocate an Activation Context Stack */ DPRINT("ActivationContextStack %p\n", NtCurrentTeb()->ActivationContextStackPointer); Status = RtlAllocateActivationContextStack(&NtCurrentTeb()->ActivationContextStackPointer); @@ -526,7 +529,7 @@ LdrpInitializeThread(IN PCONTEXT Context) } /* Make sure we are not shutting down */ - if (LdrpShutdownInProgress) return; + if (LdrpShutdownInProgress) goto Exit; /* Allocate TLS */ LdrpAllocateTls(); @@ -633,6 +636,11 @@ LdrpInitializeThread(IN PCONTEXT Context) RtlDeactivateActivationContextUnsafeFast(&ActCtx); } +Exit: + + /* Release the loader lock */ + RtlLeaveCriticalSection(&LdrpLoaderLock); + DPRINT("LdrpInitializeThread() done\n"); }