From 6fb7c68eb50c17d4283fd6a3fcc06ed6ddaeb1c7 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 10 Sep 2000 18:43:37 +0000 Subject: Update. 2000-09-05 Wolfram Gloger * malloc/thread-m.h [_LIBC]: Even if not linking with libpthread, ensure usability of mutex as an `in use' flag. --- ChangeLog | 5 +++++ malloc/thread-m.h | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8f650f8793..007e43384d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2000-09-05 Wolfram Gloger + + * malloc/thread-m.h [_LIBC]: Even if not linking with libpthread, + ensure usability of mutex as an `in use' flag. + 2000-09-10 Ulrich Drepper * shlib-versions: Simplify libm entries. Correct a few Hurd entries. diff --git a/malloc/thread-m.h b/malloc/thread-m.h index d5b1e2f4b0..4e51bc29f4 100644 --- a/malloc/thread-m.h +++ b/malloc/thread-m.h @@ -1,6 +1,6 @@ /* Basic platform-independent macro definitions for mutexes and thread-specific data. - Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Wolfram Gloger , 1996. @@ -42,14 +42,22 @@ typedef pthread_mutex_t mutex_t; #define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER +/* Even if not linking with libpthread, ensure usability of mutex as + an `in use' flag, see also the NO_THREADS case below. Assume + pthread_mutex_t is at least one int wide. */ + #define mutex_init(m) \ - (__pthread_mutex_init != NULL ? __pthread_mutex_init (m, NULL) : 0) + (__pthread_mutex_init != NULL \ + ? __pthread_mutex_init (m, NULL) : (*(int *)(m) = 0)) #define mutex_lock(m) \ - (__pthread_mutex_lock != NULL ? __pthread_mutex_lock (m) : 0) + (__pthread_mutex_lock != NULL \ + ? __pthread_mutex_lock (m) : ((*(int *)(m) = 1), 0)) #define mutex_trylock(m) \ - (__pthread_mutex_trylock != NULL ? __pthread_mutex_trylock (m) : 0) + (__pthread_mutex_trylock != NULL \ + ? __pthread_mutex_trylock (m) : (*(int *)(m) ? 1 : ((*(int *)(m) = 1), 0))) #define mutex_unlock(m) \ - (__pthread_mutex_unlock != NULL ? __pthread_mutex_unlock (m) : 0) + (__pthread_mutex_unlock != NULL \ + ? __pthread_mutex_unlock (m) : (*(int*)(m) = 0)) #define thread_atfork(prepare, parent, child) \ (__pthread_atfork != NULL ? __pthread_atfork(prepare, parent, child) : 0) -- cgit 1.4.1