From eb208df05a7513b23ebcc031d772f7e8db7def50 Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Sun, 29 Sep 2002 23:47:45 +0000 Subject: 2002-09-30 Robert Collins * pthread.cc (pthread_mutex_init): Use new pthread_mutex::init. * thread.cc: Change __pthread_mutex_init to pthread_mutex::init throughout. (MTinterface::Init): Initialise pthread_mutex support. (pthread_mutex::mutexInitializationLock): Instantiate. (pthread_mutex::initMutex): New method. (__pthread_cond_dowait): Don't dereference untrusted pointers. Use the new pthread_mutex::init method. (__pthread_condattr_init): Don't dereference untrusted pointers. (__pthread_mutex_init): Rename to pthread_mutex::init. Lock and release mutexInitializationLock to prevent races on mutex initialisation. * thread.h (pthread_mutex::initMutex): New method, initialise pthread_mutex supporting state on process initialisation. (pthread_mutex::init): Initialise a single mutex. (pthread_mutex::mutexInitializationLock): A win32 mutex for syncronising pthread mutex initialisation. (__pthread_mutex_init): Remove this. --- winsup/cygwin/thread.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'winsup/cygwin/thread.h') diff --git a/winsup/cygwin/thread.h b/winsup/cygwin/thread.h index 0ac429e14..77a461ffd 100644 --- a/winsup/cygwin/thread.h +++ b/winsup/cygwin/thread.h @@ -291,6 +291,9 @@ public: static bool isGoodObject(pthread_mutex_t const *); static bool isGoodInitializer(pthread_mutex_t const *); static bool isGoodInitializerOrObject(pthread_mutex_t const *); + static void initMutex (); + static int init (pthread_mutex_t *, const pthread_mutexattr_t *); + CRITICAL_SECTION criticalsection; HANDLE win32_obj_id; LONG condwaits; @@ -305,6 +308,8 @@ public: pthread_mutex (pthread_mutexattr * = NULL); pthread_mutex (pthread_mutex_t *, pthread_mutexattr *); ~pthread_mutex (); +private: + static HANDLE mutexInitializationLock; }; class pthread:public verifyable_object @@ -561,7 +566,6 @@ int __pthread_sigmask (int operation, const sigset_t * set, int __pthread_equal (pthread_t * t1, pthread_t * t2); /* Mutexes */ -int __pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *); int __pthread_mutex_lock (pthread_mutex_t *); int __pthread_mutex_trylock (pthread_mutex_t *); int __pthread_mutex_unlock (pthread_mutex_t *); -- cgit v1.2.3