From bb641e28cbd4b824d41f45a6da4ae396d36cd97e Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sat, 25 Oct 2008 15:33:02 +0000 Subject: [PATCH] - Patch by hto: Do not wait until process is closed with process database locked. See Bug 3805. svn path=/trunk/; revision=36948 --- reactos/subsystems/win32/csrss/api/process.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/reactos/subsystems/win32/csrss/api/process.c b/reactos/subsystems/win32/csrss/api/process.c index b3d954d9e95..a760aeedda0 100644 --- a/reactos/subsystems/win32/csrss/api/process.c +++ b/reactos/subsystems/win32/csrss/api/process.c @@ -130,6 +130,7 @@ NTSTATUS STDCALL CsrFreeProcessData(HANDLE Pid) ULONG hash; UINT c; PCSRSS_PROCESS_DATA pProcessData, *pPrevLink; + HANDLE Process; hash = ((ULONG_PTR)Pid >> 2) % (sizeof(ProcessData) / sizeof(*ProcessData)); pPrevLink = &ProcessData[hash]; @@ -144,10 +145,7 @@ NTSTATUS STDCALL CsrFreeProcessData(HANDLE Pid) if (pProcessData) { DPRINT("CsrFreeProcessData pid: %d\n", Pid); - if (pProcessData->Process) - { - NtClose(pProcessData->Process); - } + Process = pProcessData->Process; if (pProcessData->HandleTable) { for (c = 0; c < pProcessData->HandleTableSize; c++) @@ -177,6 +175,10 @@ NTSTATUS STDCALL CsrFreeProcessData(HANDLE Pid) RtlFreeHeap(CsrssApiHeap, 0, pProcessData); UNLOCK; + if (Process) + { + NtClose(Process); + } return STATUS_SUCCESS; }