[Kernel] Acquiring threads
This commit is contained in:
@@ -205,6 +205,14 @@ void Kernel::sleepThreadOnArbiter(u32 waitingAddress) {
|
|||||||
// Acquires an object that is **ready to be acquired** without waiting on it
|
// Acquires an object that is **ready to be acquired** without waiting on it
|
||||||
void Kernel::acquireSyncObject(KernelObject* object, const Thread& thread) {
|
void Kernel::acquireSyncObject(KernelObject* object, const Thread& thread) {
|
||||||
switch (object->type) {
|
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: {
|
case KernelObjectType::Mutex: {
|
||||||
Mutex* moo = object->getData<Mutex>();
|
Mutex* moo = object->getData<Mutex>();
|
||||||
moo->locked = true; // Set locked to true, whether it's false or not because who cares
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case KernelObjectType::Event: {
|
case KernelObjectType::Thread:
|
||||||
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;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
default: Helpers::panic("Acquiring unimplemented sync object %s", object->getTypeName());
|
default: Helpers::panic("Acquiring unimplemented sync object %s", object->getTypeName());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user