summaryrefslogtreecommitdiff
path: root/pthread.h
diff options
context:
space:
mode:
authorbje <bje>1998-10-04 18:32:15 +0000
committerbje <bje>1998-10-04 18:32:15 +0000
commit97cb4b33462735b93ac9522df6bf4d43d0b7fe71 (patch)
treed18e07cbcf8b60ff872e4e73b3629712ea4b8ebc /pthread.h
parente7a772589fde372895d33a2c480302775f2d62c3 (diff)
1998-10-05 Ben Elliston <bje@cygnus.com>
* global.c (PTHREAD_MUTEX_INITIALIZER): Move to pthread.h. * pthread.h (PTHREAD_MUTEX_INITIALIZER): Define. (pthread_mutex_t): Reimplement as a struct containing a valid flag. If the flag is ever down upon entry to a mutex operation, we call pthread_mutex_create() to initialise the object. This fixes the problem of how to handle statically initialised objects that can't call InitializeCriticalSection() due to their context. * mutex.c (pthread_mutex_init): Set valid flag. (pthread_mutex_destroy): Clear valid flag. (pthread_mutex_lock): Check and handle the valid flag. (pthread_mutex_unlock): Likewise. (pthread_mutex_trylock): Likewise. * tests/mutex3.c: New file; test for the static initialisation macro. Passes.
Diffstat (limited to 'pthread.h')
-rw-r--r--pthread.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/pthread.h b/pthread.h
index 5c31af2..e9278c2 100644
--- a/pthread.h
+++ b/pthread.h
@@ -74,8 +74,13 @@ struct timespec {
pointer to an object in memory. */
#define PTHREAD_CANCELED ((void *) 1)
+#define PTHREAD_MUTEX_INITIALIZER {0 /* ignore internals */ }
+
typedef struct _pthread * pthread_t;
-typedef CRITICAL_SECTION pthread_mutex_t;
+typedef struct {
+ int valid;
+ CRITICAL_SECTION cs;
+} pthread_mutex_t;
typedef DWORD pthread_key_t;