Moved around some Ki functions
This commit is contained in:
parent
c1df95b324
commit
e80fcd4d07
|
@ -87,77 +87,6 @@ xboxkrnl::ULONGLONG LARGE_INTEGER2ULONGLONG(xboxkrnl::LARGE_INTEGER value)
|
||||||
return *((PULONGLONG)&value);
|
return *((PULONGLONG)&value);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define KiWaitSatisfyMutant(_Object_, _Thread_) { \
|
|
||||||
(_Object_)->Header.SignalState -= 1; \
|
|
||||||
if ((_Object_)->Header.SignalState == 0) { \
|
|
||||||
(_Object_)->OwnerThread = (_Thread_); \
|
|
||||||
if ((_Object_)->Abandoned == TRUE) { \
|
|
||||||
(_Object_)->Abandoned = FALSE; \
|
|
||||||
(_Thread_)->WaitStatus = STATUS_ABANDONED; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
InsertHeadList((_Thread_)->MutantListHead.Blink, \
|
|
||||||
&(_Object_)->MutantListEntry); \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define KiWaitSatisfyOther(_Object_) { \
|
|
||||||
if (((_Object_)->Header.Type & DISPATCHER_OBJECT_TYPE_MASK) == EventSynchronizationObject) { \
|
|
||||||
(_Object_)->Header.SignalState = 0; \
|
|
||||||
\
|
|
||||||
} else if ((_Object_)->Header.Type == SemaphoreObject) { \
|
|
||||||
(_Object_)->Header.SignalState -= 1; \
|
|
||||||
\
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define KiWaitSatisfyAny(_Object_, _Thread_) { \
|
|
||||||
if (((_Object_)->Header.Type & DISPATCHER_OBJECT_TYPE_MASK) == EventSynchronizationObject) { \
|
|
||||||
(_Object_)->Header.SignalState = 0; \
|
|
||||||
\
|
|
||||||
} else if ((_Object_)->Header.Type == SemaphoreObject) { \
|
|
||||||
(_Object_)->Header.SignalState -= 1; \
|
|
||||||
\
|
|
||||||
} else if ((_Object_)->Header.Type == MutantObject) { \
|
|
||||||
(_Object_)->Header.SignalState -= 1; \
|
|
||||||
if ((_Object_)->Header.SignalState == 0) { \
|
|
||||||
(_Object_)->OwnerThread = (_Thread_); \
|
|
||||||
if ((_Object_)->Abandoned == TRUE) { \
|
|
||||||
(_Object_)->Abandoned = FALSE; \
|
|
||||||
(_Thread_)->WaitStatus = STATUS_ABANDONED; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
InsertHeadList((_Thread_)->MutantListHead.Blink, \
|
|
||||||
&(_Object_)->MutantListEntry); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
void FASTCALL KiWaitSatisfyAll
|
|
||||||
(
|
|
||||||
IN xboxkrnl::PKWAIT_BLOCK WaitBlock
|
|
||||||
)
|
|
||||||
{
|
|
||||||
using namespace xboxkrnl;
|
|
||||||
|
|
||||||
PKMUTANT Object;
|
|
||||||
PRKTHREAD Thread;
|
|
||||||
PKWAIT_BLOCK WaitBlock1;
|
|
||||||
|
|
||||||
WaitBlock1 = WaitBlock;
|
|
||||||
Thread = WaitBlock1->Thread;
|
|
||||||
do {
|
|
||||||
if (WaitBlock1->WaitKey != (CSHORT)STATUS_TIMEOUT) {
|
|
||||||
Object = (PKMUTANT)WaitBlock1->Object;
|
|
||||||
KiWaitSatisfyAny(Object, Thread);
|
|
||||||
}
|
|
||||||
|
|
||||||
WaitBlock1 = WaitBlock1->NextWaitBlock;
|
|
||||||
} while (WaitBlock1 != WaitBlock);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define TestForAlertPending(Alertable) \
|
#define TestForAlertPending(Alertable) \
|
||||||
if (Alertable) { \
|
if (Alertable) { \
|
||||||
if (Thread->Alerted[WaitMode] != FALSE) { \
|
if (Thread->Alerted[WaitMode] != FALSE) { \
|
||||||
|
|
|
@ -829,3 +829,28 @@ xboxkrnl::VOID FASTCALL xboxkrnl::KiTimerListExpire(
|
||||||
KiTimerUnlock();
|
KiTimerUnlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xboxkrnl::VOID FASTCALL xboxkrnl::KiWaitSatisfyAll
|
||||||
|
(
|
||||||
|
IN xboxkrnl::PKWAIT_BLOCK WaitBlock
|
||||||
|
)
|
||||||
|
{
|
||||||
|
using namespace xboxkrnl;
|
||||||
|
|
||||||
|
PKMUTANT Object;
|
||||||
|
PRKTHREAD Thread;
|
||||||
|
PKWAIT_BLOCK WaitBlock1;
|
||||||
|
|
||||||
|
WaitBlock1 = WaitBlock;
|
||||||
|
Thread = WaitBlock1->Thread;
|
||||||
|
do {
|
||||||
|
if (WaitBlock1->WaitKey != (CSHORT)STATUS_TIMEOUT) {
|
||||||
|
Object = (PKMUTANT)WaitBlock1->Object;
|
||||||
|
KiWaitSatisfyAny(Object, Thread);
|
||||||
|
}
|
||||||
|
|
||||||
|
WaitBlock1 = WaitBlock1->NextWaitBlock;
|
||||||
|
} while (WaitBlock1 != WaitBlock);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -134,6 +134,10 @@ namespace xboxkrnl
|
||||||
IN PLIST_ENTRY ExpiredListHead,
|
IN PLIST_ENTRY ExpiredListHead,
|
||||||
IN KIRQL OldIrql
|
IN KIRQL OldIrql
|
||||||
);
|
);
|
||||||
|
|
||||||
|
VOID FASTCALL KiWaitSatisfyAll(
|
||||||
|
IN PKWAIT_BLOCK WaitBlock
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define KiLockDispatcherDatabase(OldIrql) \
|
#define KiLockDispatcherDatabase(OldIrql) \
|
||||||
|
@ -153,3 +157,49 @@ namespace xboxkrnl
|
||||||
_ListHead = &KiWaitInListHead; \
|
_ListHead = &KiWaitInListHead; \
|
||||||
InsertTailList(_ListHead, &(_Thread)->WaitListEntry); \
|
InsertTailList(_ListHead, &(_Thread)->WaitListEntry); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define KiWaitSatisfyMutant(_Object_, _Thread_) { \
|
||||||
|
(_Object_)->Header.SignalState -= 1; \
|
||||||
|
if ((_Object_)->Header.SignalState == 0) { \
|
||||||
|
(_Object_)->OwnerThread = (_Thread_); \
|
||||||
|
if ((_Object_)->Abandoned == TRUE) { \
|
||||||
|
(_Object_)->Abandoned = FALSE; \
|
||||||
|
(_Thread_)->WaitStatus = STATUS_ABANDONED; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
InsertHeadList((_Thread_)->MutantListHead.Blink, \
|
||||||
|
&(_Object_)->MutantListEntry); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define KiWaitSatisfyOther(_Object_) { \
|
||||||
|
if (((_Object_)->Header.Type & DISPATCHER_OBJECT_TYPE_MASK) == EventSynchronizationObject) { \
|
||||||
|
(_Object_)->Header.SignalState = 0; \
|
||||||
|
\
|
||||||
|
} else if ((_Object_)->Header.Type == SemaphoreObject) { \
|
||||||
|
(_Object_)->Header.SignalState -= 1; \
|
||||||
|
\
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define KiWaitSatisfyAny(_Object_, _Thread_) { \
|
||||||
|
if (((_Object_)->Header.Type & DISPATCHER_OBJECT_TYPE_MASK) == EventSynchronizationObject) { \
|
||||||
|
(_Object_)->Header.SignalState = 0; \
|
||||||
|
\
|
||||||
|
} else if ((_Object_)->Header.Type == SemaphoreObject) { \
|
||||||
|
(_Object_)->Header.SignalState -= 1; \
|
||||||
|
\
|
||||||
|
} else if ((_Object_)->Header.Type == MutantObject) { \
|
||||||
|
(_Object_)->Header.SignalState -= 1; \
|
||||||
|
if ((_Object_)->Header.SignalState == 0) { \
|
||||||
|
(_Object_)->OwnerThread = (_Thread_); \
|
||||||
|
if ((_Object_)->Abandoned == TRUE) { \
|
||||||
|
(_Object_)->Abandoned = FALSE; \
|
||||||
|
(_Thread_)->WaitStatus = STATUS_ABANDONED; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
InsertHeadList((_Thread_)->MutantListHead.Blink, \
|
||||||
|
&(_Object_)->MutantListEntry); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue