https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6f89a48349c0b16ce59378cbfa842823f38bbadf

commit 6f89a48349c0b16ce59378cbfa842823f38bbadf
Author:     Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org>
AuthorDate: Sat Nov 6 18:43:35 2021 +0100
Commit:     Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org>
CommitDate: Thu Sep 21 13:33:26 2023 +0200

    [NTDLL:LDR] Fix process LoadConfig CS timeout conversion from ms to 100ns 
units (#4089)
    
    For more details, see
    
https://forums.codeguru.com/showthread.php?370731-EnterCriticalSection-locking&p=1302399#post1302399
---
 dll/ntdll/ldr/ldrinit.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/dll/ntdll/ldr/ldrinit.c b/dll/ntdll/ldr/ldrinit.c
index ed9774fc0c2..d5a6b37d923 100644
--- a/dll/ntdll/ldr/ldrinit.c
+++ b/dll/ntdll/ldr/ldrinit.c
@@ -1839,7 +1839,7 @@ LdrpInitializeProcess(IN PCONTEXT Context,
     /* ReactOS specific: do not clear it. (Windows starts doing the same in 
later versions) */
     //Peb->pShimData = NULL;
 
-    /* Save the number of processors and CS Timeout */
+    /* Save the number of processors and CS timeout */
     LdrpNumberOfProcessors = Peb->NumberOfProcessors;
     RtlpTimeout = Peb->CriticalSectionTimeout;
 
@@ -1894,8 +1894,9 @@ LdrpInitializeProcess(IN PCONTEXT Context,
         if (VALID_CONFIG_FIELD(GlobalFlagsClear) && 
LoadConfig->GlobalFlagsClear)
             Peb->NtGlobalFlag &= ~LoadConfig->GlobalFlagsClear;
 
+        /* Convert the default CS timeout from milliseconds to 100ns units */
         if (VALID_CONFIG_FIELD(CriticalSectionDefaultTimeout) && 
LoadConfig->CriticalSectionDefaultTimeout)
-            RtlpTimeout.QuadPart = 
Int32x32To64(LoadConfig->CriticalSectionDefaultTimeout, -10000000);
+            RtlpTimeout.QuadPart = 
Int32x32To64(LoadConfig->CriticalSectionDefaultTimeout, -10000);
 
         if (VALID_CONFIG_FIELD(DeCommitFreeBlockThreshold) && 
LoadConfig->DeCommitFreeBlockThreshold)
             HeapParameters.DeCommitFreeBlockThreshold = 
LoadConfig->DeCommitFreeBlockThreshold;
@@ -1935,12 +1936,9 @@ LdrpInitializeProcess(IN PCONTEXT Context,
                 &CommandLine);
     }
 
-    /* If the timeout is too long */
+    /* If the CS timeout is longer than 1 hour, disable it */
     if (RtlpTimeout.QuadPart < Int32x32To64(3600, -10000000))
-    {
-        /* Then disable CS Timeout */
         RtlpTimeoutDisable = TRUE;
-    }
 
     /* Initialize Critical Section Data */
     RtlpInitDeferredCriticalSection();

Reply via email to