diff --git a/reactos/subsys/csrss/api/process.c b/reactos/subsys/csrss/api/process.c index 858177e55b6..dc7d54619ba 100644 --- a/reactos/subsys/csrss/api/process.c +++ b/reactos/subsys/csrss/api/process.c @@ -37,7 +37,7 @@ PCSRSS_PROCESS_DATA STDCALL CsrGetProcessData(HANDLE ProcessId) ULONG hash; PCSRSS_PROCESS_DATA pProcessData; - hash = ((ULONG_PTR)ProcessId & ~0x3) % (sizeof(ProcessData) / sizeof(*ProcessData)); + hash = ((ULONG_PTR)ProcessId >> 2) % (sizeof(ProcessData) / sizeof(*ProcessData)); LOCK; @@ -59,7 +59,7 @@ PCSRSS_PROCESS_DATA STDCALL CsrCreateProcessData(HANDLE ProcessId) CLIENT_ID ClientId; NTSTATUS Status; - hash = ((ULONG_PTR)ProcessId & ~0x3) % (sizeof(ProcessData) / sizeof(*ProcessData)); + hash = ((ULONG_PTR)ProcessId >> 2) % (sizeof(ProcessData) / sizeof(*ProcessData)); LOCK; @@ -100,7 +100,10 @@ PCSRSS_PROCESS_DATA STDCALL CsrCreateProcessData(HANDLE ProcessId) RtlFreeHeap(CsrssApiHeap, 0, pProcessData); pProcessData = NULL; } - RtlInitializeCriticalSection(&pProcessData->HandleTableLock); + else + { + RtlInitializeCriticalSection(&pProcessData->HandleTableLock); + } } } else @@ -110,7 +113,7 @@ PCSRSS_PROCESS_DATA STDCALL CsrCreateProcessData(HANDLE ProcessId) UNLOCK; if (pProcessData == NULL) { - DbgPrint("CSR: CsrGetProcessData() failed\n"); + DPRINT1("CsrCreateProcessData() failed\n"); } return pProcessData; } @@ -121,7 +124,7 @@ NTSTATUS STDCALL CsrFreeProcessData(HANDLE Pid) UINT c; PCSRSS_PROCESS_DATA pProcessData, pPrevProcessData = NULL; - hash = ((ULONG_PTR)Pid & ~0x3) % (sizeof(ProcessData) / sizeof(*ProcessData)); + hash = ((ULONG_PTR)Pid >> 2) % (sizeof(ProcessData) / sizeof(*ProcessData)); LOCK; @@ -142,9 +145,7 @@ NTSTATUS STDCALL CsrFreeProcessData(HANDLE Pid) } if (pProcessData->Console) { - RtlEnterCriticalSection(&ProcessDataLock); RemoveEntryList(&pProcessData->ProcessEntry); - RtlLeaveCriticalSection(&ProcessDataLock); } if (pProcessData->HandleTable) {