mirror of
https://github.com/reactos/reactos.git
synced 2025-06-06 01:40:36 +00:00
[WIN32K] Keep a reference on an ETHREAD while THREADINFO exists
This commit is contained in:
parent
e5904abf94
commit
ba893e1172
1 changed files with 6 additions and 18 deletions
|
@ -89,13 +89,6 @@ AllocW32Process(IN PEPROCESS Process,
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FreeW32Process(/*Process*/ W32Process) \
|
|
||||||
do { \
|
|
||||||
/*PPROCESSINFO W32Process = PsGetProcessWin32Process(Process);*/ \
|
|
||||||
/*ASSERT(W32Process);*/ \
|
|
||||||
IntDereferenceProcessInfo(W32Process); \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called from IntDereferenceProcessInfo
|
* Called from IntDereferenceProcessInfo
|
||||||
*/
|
*/
|
||||||
|
@ -332,7 +325,7 @@ ExitProcessCallback(PEPROCESS Process)
|
||||||
ppiCurrent->peProcess = NULL;
|
ppiCurrent->peProcess = NULL;
|
||||||
|
|
||||||
/* Finally, dereference */
|
/* Finally, dereference */
|
||||||
FreeW32Process(/*Process*/ ppiCurrent); // IntDereferenceProcessInfo(ppiCurrent);
|
IntDereferenceProcessInfo(ppiCurrent);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -397,19 +390,13 @@ AllocW32Thread(IN PETHREAD Thread,
|
||||||
RtlZeroMemory(ptiCurrent, sizeof(*ptiCurrent));
|
RtlZeroMemory(ptiCurrent, sizeof(*ptiCurrent));
|
||||||
|
|
||||||
PsSetThreadWin32Thread(Thread, ptiCurrent, NULL);
|
PsSetThreadWin32Thread(Thread, ptiCurrent, NULL);
|
||||||
|
ObReferenceObject(Thread);
|
||||||
IntReferenceThreadInfo(ptiCurrent);
|
IntReferenceThreadInfo(ptiCurrent);
|
||||||
|
|
||||||
*W32Thread = ptiCurrent;
|
*W32Thread = ptiCurrent;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FreeW32Thread(/*Thread*/ W32Thread) \
|
|
||||||
do { \
|
|
||||||
/*PTHREADINFO W32Thread = PsGetThreadWin32Thread(Thread);*/ \
|
|
||||||
/*ASSERT(W32Thread);*/ \
|
|
||||||
IntDereferenceThreadInfo(W32Thread); \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called from IntDereferenceThreadInfo
|
* Called from IntDereferenceThreadInfo
|
||||||
*/
|
*/
|
||||||
|
@ -428,6 +415,8 @@ UserDeleteW32Thread(PTHREADINFO pti)
|
||||||
|
|
||||||
MsqCleanupThreadMsgs(pti);
|
MsqCleanupThreadMsgs(pti);
|
||||||
|
|
||||||
|
ObDereferenceObject(pti->pEThread);
|
||||||
|
|
||||||
ExFreePoolWithTag(pti, USERTAG_THREADINFO);
|
ExFreePoolWithTag(pti, USERTAG_THREADINFO);
|
||||||
|
|
||||||
IntDereferenceProcessInfo(ppi);
|
IntDereferenceProcessInfo(ppi);
|
||||||
|
@ -845,10 +834,9 @@ ExitThreadCallback(PETHREAD Thread)
|
||||||
|
|
||||||
/* The thread is dying */
|
/* The thread is dying */
|
||||||
PsSetThreadWin32Thread(Thread /*ptiCurrent->pEThread*/, NULL, ptiCurrent);
|
PsSetThreadWin32Thread(Thread /*ptiCurrent->pEThread*/, NULL, ptiCurrent);
|
||||||
ptiCurrent->pEThread = NULL;
|
|
||||||
|
|
||||||
/* Free the THREADINFO */
|
/* Dereference the THREADINFO */
|
||||||
FreeW32Thread(/*Thread*/ ptiCurrent); // IntDereferenceThreadInfo(ptiCurrent);
|
IntDereferenceThreadInfo(ptiCurrent);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue