From e7baf6a4b0ff6152cf0664feaea7fa8923834a10 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Fri, 6 Jul 2012 17:17:45 +0200 Subject: [PATCH] Updated the kthread compatibility layer with signal support. --- sortix/include/sortix/kernel/kthread.h | 44 ++++++++++++++++++++++---- sortix/kthread.cpp | 13 +++++++- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/sortix/include/sortix/kernel/kthread.h b/sortix/include/sortix/kernel/kthread.h index c73d0288..20c992f5 100644 --- a/sortix/include/sortix/kernel/kthread.h +++ b/sortix/include/sortix/kernel/kthread.h @@ -1,6 +1,6 @@ /******************************************************************************* - COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2012. + Copyright(C) Jonas 'Sortie' Termansen 2012. This file is part of Sortix. @@ -26,20 +26,27 @@ #ifndef SORTIX_KTHREAD_H #define SORTIX_KTHREAD_H +#define GOT_FAKE_KTHREAD #warning Using noop kthread functions namespace Sortix { +extern "C" { + typedef unsigned kthread_mutex_t; const kthread_mutex_t KTHREAD_MUTEX_INITIALIZER = 0; -extern "C" unsigned kthread_mutex_trylock(kthread_mutex_t* mutex); -extern "C" void kthread_mutex_lock(kthread_mutex_t* mutex); -extern "C" void kthread_mutex_unlock(kthread_mutex_t* mutex); +unsigned kthread_mutex_trylock(kthread_mutex_t* mutex); +void kthread_mutex_lock(kthread_mutex_t* mutex); +unsigned long kthread_mutex_lock_signal(kthread_mutex_t* mutex); +void kthread_mutex_unlock(kthread_mutex_t* mutex); typedef unsigned kthread_cond_t; const kthread_cond_t KTHREAD_COND_INITIALIZER = 0; -extern "C" void kthread_cond_wait(kthread_cond_t* cond, kthread_mutex_t* mutex); -extern "C" void kthread_cond_signal(kthread_cond_t* cond); -extern "C" void kthread_cond_broadcast(kthread_cond_t* cond); +void kthread_cond_wait(kthread_cond_t* cond, kthread_mutex_t* mutex); +unsigned long kthread_cond_wait_signal(kthread_cond_t* cond, kthread_mutex_t* mutex); +void kthread_cond_signal(kthread_cond_t* cond); +void kthread_cond_broadcast(kthread_cond_t* cond); + +} // extern "C" class ScopedLock { @@ -60,6 +67,29 @@ private: }; +class ScopedLockSignal +{ +public: + ScopedLockSignal(kthread_mutex_t* mutex) + { + this->mutex = mutex; + this->acquired = kthread_mutex_lock_signal(mutex); + } + + ~ScopedLockSignal() + { + if ( acquired ) + kthread_mutex_unlock(mutex); + } + + bool IsAcquired() { return acquired; } + +private: + kthread_mutex_t* mutex; + bool acquired; + +}; + } // namespace Sortix #endif diff --git a/sortix/kthread.cpp b/sortix/kthread.cpp index d10e279d..a0998acb 100644 --- a/sortix/kthread.cpp +++ b/sortix/kthread.cpp @@ -1,6 +1,6 @@ /******************************************************************************* - COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2012. + Copyright(C) Jonas 'Sortie' Termansen 2012. This file is part of Sortix. @@ -39,6 +39,11 @@ extern "C" void kthread_mutex_lock(kthread_mutex_t* mutex) { } +unsigned long kthread_mutex_lock_signal(kthread_mutex_t* mutex) +{ + return 1; +} + extern "C" void kthread_mutex_unlock(kthread_mutex_t* mutex) { } @@ -47,6 +52,12 @@ extern "C" void kthread_cond_wait(kthread_cond_t* cond, kthread_mutex_t* mutex) { } +extern "C" unsigned long kthread_cond_wait_signal(kthread_cond_t* cond, + kthread_mutex_t* mutex) +{ + return 1; +} + extern "C" void kthread_cond_signal(kthread_cond_t* cond) { }