mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 06:22:58 +00:00
kill.c: remove useless call to KeRemoveAllWaitsThread + misc
usecall.c: fix apc delivery debug.c: add irql asserts svn path=/trunk/; revision=11759
This commit is contained in:
parent
e4a0875a54
commit
b424efdf6b
4 changed files with 35 additions and 18 deletions
|
@ -124,7 +124,10 @@
|
||||||
* ARGUMENTS:
|
* ARGUMENTS:
|
||||||
* x = Maximum irql
|
* x = Maximum irql
|
||||||
*/
|
*/
|
||||||
#define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql()<=(x))
|
#define ASSERT_IRQL_LESS_OR_EQUAL(x) ASSERT(KeGetCurrentIrql()<=(x))
|
||||||
|
#define ASSERT_IRQL(x) ASSERT_IRQL_LESS_OR_EQUAL(x)
|
||||||
|
#define ASSERT_IRQL_EQUAL(x) ASSERT(KeGetCurrentIrql()==(x))
|
||||||
|
#define ASSERT_IRQL_LESS(x) ASSERT(KeGetCurrentIrql()<(x))
|
||||||
#define assert_irql(x) assert(KeGetCurrentIrql()<=(x))
|
#define assert_irql(x) assert(KeGetCurrentIrql()<=(x))
|
||||||
|
|
||||||
#endif /* __INTERNAL_DEBUG */
|
#endif /* __INTERNAL_DEBUG */
|
||||||
|
|
|
@ -72,7 +72,7 @@ VOID KeAcquireDispatcherDatabaseLockAtDpcLevel(VOID);
|
||||||
VOID KeReleaseDispatcherDatabaseLock(KIRQL Irql);
|
VOID KeReleaseDispatcherDatabaseLock(KIRQL Irql);
|
||||||
VOID KeReleaseDispatcherDatabaseLockFromDpcLevel(VOID);
|
VOID KeReleaseDispatcherDatabaseLockFromDpcLevel(VOID);
|
||||||
|
|
||||||
BOOLEAN KeDispatcherObjectWake(DISPATCHER_HEADER* hdr);
|
BOOLEAN KiDispatcherObjectWake(DISPATCHER_HEADER* hdr);
|
||||||
VOID STDCALL KeExpireTimers(PKDPC Apc,
|
VOID STDCALL KeExpireTimers(PKDPC Apc,
|
||||||
PVOID Arg1,
|
PVOID Arg1,
|
||||||
PVOID Arg2,
|
PVOID Arg2,
|
||||||
|
@ -81,7 +81,9 @@ VOID KeInitializeDispatcherHeader(DISPATCHER_HEADER* Header, ULONG Type,
|
||||||
ULONG Size, ULONG SignalState);
|
ULONG Size, ULONG SignalState);
|
||||||
VOID KeDumpStackFrames(PULONG Frame);
|
VOID KeDumpStackFrames(PULONG Frame);
|
||||||
BOOLEAN KiTestAlert(VOID);
|
BOOLEAN KiTestAlert(VOID);
|
||||||
VOID KeRemoveAllWaitsThread(struct _ETHREAD* Thread, NTSTATUS WaitStatus, BOOL Unblock);
|
|
||||||
|
BOOLEAN KiAbortWaitThread(struct _KTHREAD* Thread, NTSTATUS WaitStatus);
|
||||||
|
|
||||||
PULONG KeGetStackTopThread(struct _ETHREAD* Thread);
|
PULONG KeGetStackTopThread(struct _ETHREAD* Thread);
|
||||||
VOID KeContextToTrapFrame(PCONTEXT Context, PKTRAP_FRAME TrapFrame);
|
VOID KeContextToTrapFrame(PCONTEXT Context, PKTRAP_FRAME TrapFrame);
|
||||||
VOID STDCALL KiDeliverApc(KPROCESSOR_MODE PreviousMode,
|
VOID STDCALL KiDeliverApc(KPROCESSOR_MODE PreviousMode,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: usercall.c,v 1.31 2004/11/10 02:51:00 ion Exp $
|
/* $Id: usercall.c,v 1.32 2004/11/21 18:42:58 gdalsnes Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -41,14 +41,22 @@ KiSystemCallHook(ULONG Nr, ...)
|
||||||
VOID
|
VOID
|
||||||
KiAfterSystemCallHook(PKTRAP_FRAME TrapFrame)
|
KiAfterSystemCallHook(PKTRAP_FRAME TrapFrame)
|
||||||
{
|
{
|
||||||
if (KeGetCurrentThread()->Alerted[1] != 0 && TrapFrame->Cs != KERNEL_CS)
|
KIRQL oldIrql;
|
||||||
{
|
|
||||||
KiDeliverApc(KernelMode, NULL, NULL);
|
/* If we are returning to umode, deliver one pending umode apc.
|
||||||
}
|
* Note that kmode apcs are also delivered, even if deliverymode is UserMode.
|
||||||
if (KeGetCurrentThread()->Alerted[0] != 0 && TrapFrame->Cs != KERNEL_CS)
|
* This is because we can't return to umode with pending kmode apcs!
|
||||||
{
|
* FIXME: Should we deliver pending kmode apcs when returning from a
|
||||||
|
* kmode-to-kmode syscall (ZwXxx calls)?????
|
||||||
|
* -Gunnar
|
||||||
|
*/
|
||||||
|
if (TrapFrame->Cs != KERNEL_CS)
|
||||||
|
{
|
||||||
|
KeRaiseIrql(APC_LEVEL, &oldIrql);
|
||||||
KiDeliverApc(UserMode, NULL, TrapFrame);
|
KiDeliverApc(UserMode, NULL, TrapFrame);
|
||||||
}
|
KeLowerIrql(oldIrql);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: kill.c,v 1.85 2004/11/20 23:46:37 blight Exp $
|
/* $Id: kill.c,v 1.86 2004/11/21 18:42:58 gdalsnes Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -133,6 +133,7 @@ PsTerminateCurrentThread(NTSTATUS ExitStatus)
|
||||||
|
|
||||||
DPRINT("terminating %x\n",CurrentThread);
|
DPRINT("terminating %x\n",CurrentThread);
|
||||||
|
|
||||||
|
CurrentThread->HasTerminated = TRUE;
|
||||||
CurrentThread->ExitStatus = ExitStatus;
|
CurrentThread->ExitStatus = ExitStatus;
|
||||||
KeQuerySystemTime((PLARGE_INTEGER)&CurrentThread->ExitTime);
|
KeQuerySystemTime((PLARGE_INTEGER)&CurrentThread->ExitTime);
|
||||||
KeCancelTimer(&CurrentThread->Tcb.Timer);
|
KeCancelTimer(&CurrentThread->Tcb.Timer);
|
||||||
|
@ -192,7 +193,7 @@ PsTerminateCurrentThread(NTSTATUS ExitStatus)
|
||||||
|
|
||||||
oldIrql = KeAcquireDispatcherDatabaseLock();
|
oldIrql = KeAcquireDispatcherDatabaseLock();
|
||||||
CurrentThread->Tcb.DispatcherHeader.SignalState = TRUE;
|
CurrentThread->Tcb.DispatcherHeader.SignalState = TRUE;
|
||||||
KeDispatcherObjectWake(&CurrentThread->Tcb.DispatcherHeader);
|
KiDispatcherObjectWake(&CurrentThread->Tcb.DispatcherHeader);
|
||||||
KeReleaseDispatcherDatabaseLock (oldIrql);
|
KeReleaseDispatcherDatabaseLock (oldIrql);
|
||||||
|
|
||||||
/* The last thread shall close the door on exit */
|
/* The last thread shall close the door on exit */
|
||||||
|
@ -211,8 +212,9 @@ PsTerminateCurrentThread(NTSTATUS ExitStatus)
|
||||||
#ifdef _ENABLE_THRDEVTPAIR
|
#ifdef _ENABLE_THRDEVTPAIR
|
||||||
ExpSwapThreadEventPair(CurrentThread, NULL); /* Release the associated eventpair object, if there was one */
|
ExpSwapThreadEventPair(CurrentThread, NULL); /* Release the associated eventpair object, if there was one */
|
||||||
#endif /* _ENABLE_THRDEVTPAIR */
|
#endif /* _ENABLE_THRDEVTPAIR */
|
||||||
KeRemoveAllWaitsThread (CurrentThread, STATUS_UNSUCCESSFUL, FALSE);
|
|
||||||
|
|
||||||
|
ASSERT(CurrentThread->Tcb.WaitBlockList == NULL);
|
||||||
|
|
||||||
PsDispatchThreadNoLock(THREAD_STATE_TERMINATED_1);
|
PsDispatchThreadNoLock(THREAD_STATE_TERMINATED_1);
|
||||||
DPRINT1("Unexpected return, CurrentThread %x PsGetCurrentThread() %x\n", CurrentThread, PsGetCurrentThread());
|
DPRINT1("Unexpected return, CurrentThread %x PsGetCurrentThread() %x\n", CurrentThread, PsGetCurrentThread());
|
||||||
KEBUGCHECK(0);
|
KEBUGCHECK(0);
|
||||||
|
@ -251,7 +253,7 @@ PsTerminateOtherThread(PETHREAD Thread,
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
PKAPC Apc;
|
PKAPC Apc;
|
||||||
NTSTATUS Status;
|
KIRQL OldIrql;
|
||||||
|
|
||||||
DPRINT("PsTerminateOtherThread(Thread %x, ExitStatus %x)\n",
|
DPRINT("PsTerminateOtherThread(Thread %x, ExitStatus %x)\n",
|
||||||
Thread, ExitStatus);
|
Thread, ExitStatus);
|
||||||
|
@ -271,12 +273,14 @@ PsTerminateOtherThread(PETHREAD Thread,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
IO_NO_INCREMENT);
|
IO_NO_INCREMENT);
|
||||||
|
|
||||||
|
OldIrql = KeAcquireDispatcherDatabaseLock();
|
||||||
if (THREAD_STATE_BLOCKED == Thread->Tcb.State && UserMode == Thread->Tcb.WaitMode)
|
if (THREAD_STATE_BLOCKED == Thread->Tcb.State && UserMode == Thread->Tcb.WaitMode)
|
||||||
{
|
{
|
||||||
DPRINT("Unblocking thread\n");
|
DPRINT("Unblocking thread\n");
|
||||||
Status = STATUS_THREAD_IS_TERMINATING;
|
KiAbortWaitThread((PKTHREAD)Thread, STATUS_THREAD_IS_TERMINATING);
|
||||||
KeRemoveAllWaitsThread(Thread, Status, TRUE);
|
|
||||||
}
|
}
|
||||||
|
KeReleaseDispatcherDatabaseLock(OldIrql);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
NTSTATUS STDCALL
|
||||||
|
@ -310,7 +314,7 @@ PiTerminateProcess(PEPROCESS Process,
|
||||||
}
|
}
|
||||||
OldIrql = KeAcquireDispatcherDatabaseLock ();
|
OldIrql = KeAcquireDispatcherDatabaseLock ();
|
||||||
Process->Pcb.DispatcherHeader.SignalState = TRUE;
|
Process->Pcb.DispatcherHeader.SignalState = TRUE;
|
||||||
KeDispatcherObjectWake(&Process->Pcb.DispatcherHeader);
|
KiDispatcherObjectWake(&Process->Pcb.DispatcherHeader);
|
||||||
KeReleaseDispatcherDatabaseLock (OldIrql);
|
KeReleaseDispatcherDatabaseLock (OldIrql);
|
||||||
ObDereferenceObject(Process);
|
ObDereferenceObject(Process);
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue