Author: tkreuzer Date: Sat Aug 13 16:44:49 2011 New Revision: 53207
URL: http://svn.reactos.org/svn/reactos?rev=53207&view=rev Log: [WIN32K] Simplify the loop to remove the THREADINFO from the PROCESSINFO's list when cleaning up
Modified: trunk/reactos/subsystems/win32/win32k/main/dllmain.c
Modified: trunk/reactos/subsystems/win32/win32k/main/dllmain.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/mai... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/main/dllmain.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/main/dllmain.c [iso-8859-1] Sat Aug 13 16:44:49 2011 @@ -368,32 +368,28 @@ } else { - PTHREADINFO pti; + PTHREADINFO *ppti; PSINGLE_LIST_ENTRY psle; + PPROCESSINFO ppiCurrent;
DPRINT("Destroying W32 thread TID:%d at IRQ level: %lu\n", Thread->Cid.UniqueThread, KeGetCurrentIrql());
+ ppiCurrent = ptiCurrent->ppi; ptiCurrent->TIF_flags |= TIF_INCLEANUP; - pti = ptiCurrent->ppi->ptiList; - if (pti == ptiCurrent) - { - ptiCurrent->ppi->ptiList = ptiCurrent->ptiSibling; - ptiCurrent->ppi->cThreads--; - } - else - { - do - { - if (pti->ptiSibling == ptiCurrent) - { - pti->ptiSibling = ptiCurrent->ptiSibling; - ptiCurrent->ppi->cThreads--; - break; - } - pti = pti->ptiSibling; - } - while (pti); - } + + /* Find the THREADINFO in the PROCESSINFO's list */ + ppti = &ppiCurrent->ptiList; + while (*ppti != NULL && *ppti != ptiCurrent) + { + ppti = &((*ppti)->ptiSibling); + } + + /* we must have found it */ + ASSERT(*ppti == ptiCurrent); + + /* Remove it from the list */ + *ppti = ptiCurrent->ptiSibling; + DceFreeThreadDCE(ptiCurrent); HOOK_DestroyThreadHooks(Thread); EVENT_DestroyThreadEvents(Thread); @@ -421,6 +417,9 @@ }
IntSetThreadDesktop(NULL, TRUE); + + /* Decrement thread count */ + ppiCurrent->cThreads--;
PsSetThreadWin32Thread(Thread, NULL); }