summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/thread.h
diff options
context:
space:
mode:
authorRobert Collins <rbtcollins@hotmail.com>2002-09-29 23:47:45 +0000
committerRobert Collins <rbtcollins@hotmail.com>2002-09-29 23:47:45 +0000
commiteb208df05a7513b23ebcc031d772f7e8db7def50 (patch)
treea27ba48f61201a169476202cbc1f51280c0a85e7 /winsup/cygwin/thread.h
parentb2c3ba8ad067227f5705339c26eea18208559c4b (diff)
downloadcygnal-eb208df05a7513b23ebcc031d772f7e8db7def50.tar.gz
cygnal-eb208df05a7513b23ebcc031d772f7e8db7def50.tar.bz2
cygnal-eb208df05a7513b23ebcc031d772f7e8db7def50.zip
2002-09-30 Robert Collins <rbtcollins@hotmail.com>
* 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.
Diffstat (limited to 'winsup/cygwin/thread.h')
-rw-r--r--winsup/cygwin/thread.h6
1 files changed, 5 insertions, 1 deletions
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 *);