mirror of
https://github.com/reactos/reactos.git
synced 2026-06-02 17:31:23 +08:00
[NTDLL] Acquire LdrpLoaderLock in LdrpInitializeThread
This is required to protect against a race with LdrShutdownThread, which can lead to all kinds of problems, including deadlocks.
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user