[Kernel] Acquiring threads

This commit is contained in:
wheremyfoodat 2023-04-23 01:07:21 +03:00
parent 908e1fc4fd
commit 9532e694b3

View file

@ -205,6 +205,14 @@ void Kernel::sleepThreadOnArbiter(u32 waitingAddress) {
// Acquires an object that is **ready to be acquired** without waiting on it
void Kernel::acquireSyncObject(KernelObject* object, const Thread& thread) {
switch (object->type) {
case KernelObjectType::Event: {
Event* e = object->getData<Event>();
if (e->resetType == ResetType::OneShot) { // One-shot events automatically get cleared after waking up a thread
e->fired = false;
}
break;
}
case KernelObjectType::Mutex: {
Mutex* moo = object->getData<Mutex>();
moo->locked = true; // Set locked to true, whether it's false or not because who cares
@ -215,13 +223,8 @@ void Kernel::acquireSyncObject(KernelObject* object, const Thread& thread) {
break;
}
case KernelObjectType::Event: {
Event* e = object->getData<Event>();
if (e->resetType == ResetType::OneShot) { // One-shot events automatically get cleared after waking up a thread
e->fired = false;
}
case KernelObjectType::Thread:
break;
}
default: Helpers::panic("Acquiring unimplemented sync object %s", object->getTypeName());
}