aboutsummaryrefslogtreecommitdiff
path: root/libjava/include
diff options
context:
space:
mode:
authorAnthony Green <green@cygnus.com>2000-04-09 05:41:56 +0000
committerAnthony Green <green@gcc.gnu.org>2000-04-09 05:41:56 +0000
commit568fe067bc84a419816b46848bbe44b18cd2c80f (patch)
treed99505540e265a3314a56696be14cfaa4bedd148 /libjava/include
parentbdf2ced9051950168dda357983e58f234363ef28 (diff)
downloadgcc-568fe067bc84a419816b46848bbe44b18cd2c80f.zip
gcc-568fe067bc84a419816b46848bbe44b18cd2c80f.tar.gz
gcc-568fe067bc84a419816b46848bbe44b18cd2c80f.tar.bz2
posix-threads.cc (_Jv_MutexLock): Moved back to posix-threads.h.
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. From-SVN: r33037
Diffstat (limited to 'libjava/include')
-rw-r--r--libjava/include/posix-threads.h34
1 files changed, 32 insertions, 2 deletions
diff --git a/libjava/include/posix-threads.h b/libjava/include/posix-threads.h
index 22f6717..03a4390 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