From a61201b8047ebe278cfb281723a4bf6c82556472 Mon Sep 17 00:00:00 2001 From: Christian Cunningham Date: Thu, 6 Jan 2022 15:51:48 -0800 Subject: Scheduling --- src/util/mutex.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/util/mutex.c') diff --git a/src/util/mutex.c b/src/util/mutex.c index ade0be3..de7a515 100644 --- a/src/util/mutex.c +++ b/src/util/mutex.c @@ -1,13 +1,23 @@ #include #include +#include #include unsigned char lock_mutex(struct Mutex* m, unsigned long pid) { if (m->pid == NULL_PID) { - atm_lock(pid, &m->pid); + // Use currently running thread's PID if no pid given + if (pid == 0) { + struct Thread* thread = scheduler.rthread_ll->data; + atm_lock(thread->data.pid, &m->pid); + } else { + atm_lock(pid, &m->pid); + } return 0; } + struct Thread* thread = scheduler.rthread_ll->data; + thread->data.status = THREAD_WAITING_FOR_MUTEX; + thread->data.mutex_waiting = m; return 1; } @@ -16,7 +26,15 @@ unsigned char lock_mutex(struct Mutex* m, unsigned long pid) // mutex's pid lock unsigned char release_mutex(struct Mutex* m, unsigned long pid) { - if (m->pid == pid) { + // Use current thread's PID if no pid + if (pid == 0) { + struct Thread* thread = scheduler.rthread_ll->data; + if (m->pid == thread->data.pid) { + atm_release(&m->pid); + return 0; + } + } + else if (m->pid == pid) { atm_release(&m->pid); return 0; } -- cgit v1.2.1