diff --git a/headers/private/fs_shell/fssh_lock.h b/headers/private/fs_shell/fssh_lock.h index 8e591d5a2c..816420d2e3 100644 --- a/headers/private/fs_shell/fssh_lock.h +++ b/headers/private/fs_shell/fssh_lock.h @@ -115,11 +115,42 @@ public: // RecursiveLocker typedef AutoLocker RecursiveLocker; +class ReadWriteLockReadLocking { +public: + inline bool Lock(fssh_rw_lock *lockable) + { + return fssh_rw_lock_read_lock(lockable) == FSSH_B_OK; + } + + inline void Unlock(fssh_rw_lock *lockable) + { + fssh_rw_lock_read_unlock(lockable); + } +}; + +class ReadWriteLockWriteLocking { +public: + inline bool Lock(fssh_rw_lock *lockable) + { + return fssh_rw_lock_write_lock(lockable) == FSSH_B_OK; + } + + inline void Unlock(fssh_rw_lock *lockable) + { + fssh_rw_lock_write_unlock(lockable); + } +}; + +typedef AutoLocker ReadLocker; +typedef AutoLocker WriteLocker; + } // namespace FSShell using FSShell::AutoLocker; using FSShell::MutexLocker; using FSShell::RecursiveLocker; +using FSShell::ReadLocker; +using FSShell::WriteLocker; #endif // __cplusplus diff --git a/headers/private/kernel/util/AutoLock.h b/headers/private/kernel/util/AutoLock.h index f8afeb5ed5..b98cc57473 100644 --- a/headers/private/kernel/util/AutoLock.h +++ b/headers/private/kernel/util/AutoLock.h @@ -1,5 +1,7 @@ /* + * Copyright 2008, Axel Dörfler, axeld@pinc-software.de. * Copyright 2005-2007, Ingo Weinhold, bonefish@users.sf.net. All rights reserved. + * * Distributed under the terms of the MIT License. */ #ifndef KERNEL_UTIL_AUTO_LOCKER_H @@ -50,6 +52,35 @@ public: // RecursiveLocker typedef AutoLocker RecursiveLocker; +class ReadWriteLockReadLocking { +public: + inline bool Lock(rw_lock *lockable) + { + return rw_lock_read_lock(lockable) == B_OK; + } + + inline void Unlock(rw_lock *lockable) + { + rw_lock_read_unlock(lockable); + } +}; + +class ReadWriteLockWriteLocking { +public: + inline bool Lock(rw_lock *lockable) + { + return rw_lock_write_lock(lockable) == B_OK; + } + + inline void Unlock(rw_lock *lockable) + { + rw_lock_write_unlock(lockable); + } +}; + +typedef AutoLocker ReadLocker; +typedef AutoLocker WriteLocker; + // InterruptsLocking class InterruptsLocking { public: @@ -135,6 +166,8 @@ typedef AutoLocker InterruptsSpinLocker; using BPrivate::AutoLocker; using BPrivate::MutexLocker; using BPrivate::RecursiveLocker; +using BPrivate::ReadLocker; +using BPrivate::WriteLocker; using BPrivate::InterruptsLocker; using BPrivate::SpinLocker; using BPrivate::InterruptsSpinLocker; diff --git a/src/tools/fs_shell/lock.cpp b/src/tools/fs_shell/lock.cpp index ae57764158..0c031825d8 100644 --- a/src/tools/fs_shell/lock.cpp +++ b/src/tools/fs_shell/lock.cpp @@ -122,6 +122,13 @@ fssh_mutex_init(fssh_mutex *m, const char *name) } +extern "C" void +fssh_mutex_init_etc(fssh_mutex *m, const char *name, uint32_t flags) +{ + fssh_mutex_init(m, name); +} + + extern "C" void fssh_mutex_destroy(fssh_mutex *mutex) { @@ -187,6 +194,13 @@ fssh_rw_lock_init(fssh_rw_lock *lock, const char *name) } +extern "C" void +fssh_rw_lock_init_etc(fssh_rw_lock *lock, const char *name, uint32_t flags) +{ + fssh_rw_lock_init(lock, name); +} + + extern "C" void fssh_rw_lock_destroy(fssh_rw_lock *lock) {