diff options
author | green <green@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-04-09 05:41:56 +0000 |
---|---|---|
committer | green <green@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-04-09 05:41:56 +0000 |
commit | 25882d984559dcf6fe7381fa7e05a41b3e39e2c3 (patch) | |
tree | d99505540e265a3314a56696be14cfaa4bedd148 /libjava/include/posix-threads.h | |
parent | 4996a955146ff81b8e0c812e60065fac7e3e06e6 (diff) | |
download | gcc-25882d984559dcf6fe7381fa7e05a41b3e39e2c3.tar.gz |
2000-04-08 Anthony Green <green@cygnus.com>
* posix-threads.cc (_Jv_MutexLock): Moved back to posix-threads.h.
(_Jv_MutexUnlock): Ditto.
* include/posix-threads.h (_Jv_MutexLock): From posix-threads.cc.
(_Jv_MutexUnlock): Ditto.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33037 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/include/posix-threads.h')
-rw-r--r-- | libjava/include/posix-threads.h | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/libjava/include/posix-threads.h b/libjava/include/posix-threads.h index 22f6717e82d..03a43906bd6 100644 --- a/libjava/include/posix-threads.h +++ b/libjava/include/posix-threads.h @@ -115,8 +115,38 @@ _Jv_MutexInit (_Jv_Mutex_t *mu) mu->owner = 0; } -int _Jv_MutexLock (_Jv_Mutex_t *mu); -int _Jv_MutexUnlock (_Jv_Mutex_t *mu); +inline int +_Jv_MutexLock (_Jv_Mutex_t *mu) +{ + pthread_t self = pthread_self (); + if (mu->owner == self) + { + mu->count++; + } + else + { + pthread_mutex_lock (&mu->mutex); + mu->count = 1; + mu->owner = self; + } + return 0; +} + +inline int +_Jv_MutexUnlock (_Jv_Mutex_t *mu) +{ + if (_Jv_PthreadCheckMonitor (mu)) + return _JV_NOT_OWNER; + + mu->count--; + + if (mu->count == 0) + { + mu->owner = 0; + pthread_mutex_unlock (&mu->mutex); + } + return 0; +} #ifndef LINUX_THREADS |