mirror of
https://github.com/reactos/reactos.git
synced 2024-10-15 13:45:58 +00:00
[CSRSRV]
Dereference all threads, when a process is terminated. Fixes ghost processes in taskmgr! Patch by Rafal Harabien, <rafalh1992 AT o2 DOT pl> See issue #1567 for more details. svn path=/trunk/; revision=50803
This commit is contained in:
parent
da4ba71aee
commit
269bbf1328
|
@ -145,6 +145,8 @@ NTSTATUS WINAPI CsrFreeProcessData(HANDLE Pid)
|
|||
ULONG hash;
|
||||
PCSRSS_PROCESS_DATA pProcessData, *pPrevLink;
|
||||
HANDLE Process;
|
||||
PLIST_ENTRY NextEntry;
|
||||
PCSR_THREAD Thread;
|
||||
|
||||
hash = ((ULONG_PTR)Pid >> 2) % (sizeof(ProcessData) / sizeof(*ProcessData));
|
||||
pPrevLink = &ProcessData[hash];
|
||||
|
@ -161,14 +163,27 @@ NTSTATUS WINAPI CsrFreeProcessData(HANDLE Pid)
|
|||
DPRINT("CsrFreeProcessData pid: %d\n", Pid);
|
||||
Process = pProcessData->Process;
|
||||
CallProcessDeleted(pProcessData);
|
||||
|
||||
/* Dereference all process threads */
|
||||
NextEntry = pProcessData->ThreadList.Flink;
|
||||
while (NextEntry != &pProcessData->ThreadList)
|
||||
{
|
||||
Thread = CONTAINING_RECORD(NextEntry, CSR_THREAD, Link);
|
||||
NextEntry = NextEntry->Flink;
|
||||
|
||||
CsrThreadRefcountZero(Thread);
|
||||
}
|
||||
|
||||
if (pProcessData->CsrSectionViewBase)
|
||||
{
|
||||
NtUnmapViewOfSection(NtCurrentProcess(), pProcessData->CsrSectionViewBase);
|
||||
}
|
||||
|
||||
if (pProcessData->ServerCommunicationPort)
|
||||
{
|
||||
NtClose(pProcessData->ServerCommunicationPort);
|
||||
}
|
||||
|
||||
*pPrevLink = pProcessData->next;
|
||||
|
||||
RtlFreeHeap(CsrssApiHeap, 0, pProcessData);
|
||||
|
|
Loading…
Reference in a new issue