summaryrefslogtreecommitdiff
path: root/glib
diff options
context:
space:
mode:
authorSebastian Wilhelmi <wilhelmi@ira.uka.de>2000-11-13 12:50:16 +0000
committerSebastian Wilhelmi <wilhelmi@src.gnome.org>2000-11-13 12:50:16 +0000
commit82ab77c8f7b3f7969826ffc88c6349a5f7be9daf (patch)
tree544e5e9c5bf768bca64d23e26ea8e93d56a0412a /glib
parent292152dae21f8a5e710036e0922905835897c567 (diff)
downloadglib-82ab77c8f7b3f7969826ffc88c6349a5f7be9daf.tar.gz
Made recursive mutexes also work when the thread system is not (yet)
2000-11-13 Sebastian Wilhelmi <wilhelmi@ira.uka.de> * gthread.c (g_static_rec_mutex_*): Made recursive mutexes also work when the thread system is not (yet) initialized.
Diffstat (limited to 'glib')
-rw-r--r--glib/gthread.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/glib/gthread.c b/glib/gthread.c
index 034e7716d..8f03a2988 100644
--- a/glib/gthread.c
+++ b/glib/gthread.c
@@ -166,6 +166,9 @@ g_static_rec_mutex_lock (GStaticRecMutex* mutex)
g_return_if_fail (mutex);
+ if (!g_thread_supported ())
+ return;
+
G_THREAD_UF (thread_self, (&self));
if (g_system_thread_equal (self, mutex->owner))
@@ -185,6 +188,9 @@ g_static_rec_mutex_trylock (GStaticRecMutex* mutex)
g_return_val_if_fail (mutex, FALSE);
+ if (!g_thread_supported ())
+ return TRUE;
+
G_THREAD_UF (thread_self, (&self));
if (g_system_thread_equal (self, mutex->owner))
@@ -206,6 +212,9 @@ g_static_rec_mutex_unlock (GStaticRecMutex* mutex)
{
g_return_if_fail (mutex);
+ if (!g_thread_supported ())
+ return;
+
if (mutex->depth > 1)
{
mutex->depth--;
@@ -221,6 +230,9 @@ g_static_rec_mutex_lock_full (GStaticRecMutex *mutex,
{
g_return_if_fail (mutex);
+ if (!g_thread_supported ())
+ return;
+
g_static_mutex_lock (&mutex->mutex);
G_THREAD_UF (thread_self, (&mutex->owner));
mutex->depth = depth;
@@ -229,10 +241,15 @@ g_static_rec_mutex_lock_full (GStaticRecMutex *mutex,
guint
g_static_rec_mutex_unlock_full (GStaticRecMutex *mutex)
{
- gint depth = mutex->depth;
+ gint depth;
g_return_val_if_fail (mutex, 0);
+ if (!g_thread_supported ())
+ return 1;
+
+ depth = mutex->depth;
+
g_system_thread_assign (mutex->owner, zero_thread);
mutex->depth = 0;
g_static_mutex_unlock (&mutex->mutex);