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.
This commit is contained in:
@@ -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 *);
|
||||
|
Reference in New Issue
Block a user