diff options
author | Mark Kettenis <kettenis@phys.uva.nl> | 1998-05-08 02:04:27 +0200 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-05-07 18:04:27 -0600 |
commit | 96bdc4337046ab13f90361aa464fd9cedda6674b (patch) | |
tree | 3c45734e125490e741e4b458e3c3ebff3b478c56 | |
parent | 8eeeacaf54d7bac0526f9aeac34265a45b9171f0 (diff) | |
download | gcc-96bdc4337046ab13f90361aa464fd9cedda6674b.zip gcc-96bdc4337046ab13f90361aa464fd9cedda6674b.tar.gz gcc-96bdc4337046ab13f90361aa464fd9cedda6674b.tar.bz2 |
thr-posix.c (__objc_mutex_allocate): Allocate mutex type instead of assuming it fits in a void * type.
* objc/thr-posix.c (__objc_mutex_allocate): Allocate
mutex type instead of assuming it fits in a void * type.
(__objc_mutex_deallocate): Free mutex type.
(__objc_mutex_lock): Pass mutex type instead of pointer to it.
(__objc_mutex_{try,un}lock): Likewise.
(__objc_condition_allocate): Allocate condition type instead
of assuming it fits in a void * type.
(__objc_condition_deallocate): Free condition type.
(__objc_condition_wait): Pass condition type instead of pointer to it.
(__objc_condition_{broadcast,signal}): Likewise.
Another lingering RH5.1 problem.
From-SVN: r19625
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/objc/thr-posix.c | 59 |
2 files changed, 52 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 35e90cc..9d2c421 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +Fri May 8 01:04:43 1998 Mark Kettenis <kettenis@phys.uva.nl> + + * objc/thr-posix.c (__objc_mutex_allocate): Allocate + mutex type instead of assuming it fits in a void * type. + (__objc_mutex_deallocate): Free mutex type. + (__objc_mutex_lock): Pass mutex type instead of pointer to it. + (__objc_mutex_{try,un}lock): Likewise. + (__objc_condition_allocate): Allocate condition type instead + of assuming it fits in a void * type. + (__objc_condition_deallocate): Free condition type. + (__objc_condition_wait): Pass condition type instead of pointer to it. + (__objc_condition_{broadcast,signal}): Likewise. + Wed May 6 01:30:24 1998 Jeffrey A Law (law@cygnus.com) Richard Henderson (rth@cygnus.com) diff --git a/gcc/objc/thr-posix.c b/gcc/objc/thr-posix.c index d6c97e1..5b40f71 100644 --- a/gcc/objc/thr-posix.c +++ b/gcc/objc/thr-posix.c @@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */ #include "runtime.h" #include <pthread.h> -/* Key structure for maintiain thread specific storage */ +/* Key structure for maintaining thread specific storage */ static pthread_key_t _objc_thread_storage; /* Backend initialization functions */ @@ -129,41 +129,49 @@ __objc_thread_get_data(void) int __objc_mutex_allocate(objc_mutex_t mutex) { - if (pthread_mutex_init((pthread_mutex_t *)(&(mutex->backend)), NULL)) - return -1; - else - return 0; + mutex->backend = objc_malloc(sizeof(pthread_mutex_t)); + + if (pthread_mutex_init((pthread_mutex_t *)mutex->backend, NULL)) + { + objc_free(mutex->backend); + mutex->backend = NULL; + return -1; + } + + return 0; } /* Deallocate a mutex. */ int __objc_mutex_deallocate(objc_mutex_t mutex) { - if (pthread_mutex_destroy((pthread_mutex_t *)(&(mutex->backend)))) + if (pthread_mutex_destroy((pthread_mutex_t *)mutex->backend)) return -1; - else - return 0; + + objc_free(mutex->backend); + mutex->backend = NULL; + return 0; } /* Grab a lock on a mutex. */ int __objc_mutex_lock(objc_mutex_t mutex) { - return pthread_mutex_lock((pthread_mutex_t *)(&(mutex->backend))); + return pthread_mutex_lock((pthread_mutex_t *)mutex->backend); } /* Try to grab a lock on a mutex. */ int __objc_mutex_trylock(objc_mutex_t mutex) { - return pthread_mutex_trylock((pthread_mutex_t *)(&(mutex->backend))); + return pthread_mutex_trylock((pthread_mutex_t *)mutex->backend); } /* Unlock the mutex */ int __objc_mutex_unlock(objc_mutex_t mutex) { - return pthread_mutex_unlock((pthread_mutex_t *)(&(mutex->backend))); + return pthread_mutex_unlock((pthread_mutex_t *)mutex->backend); } /* Backend condition mutex functions */ @@ -172,39 +180,50 @@ __objc_mutex_unlock(objc_mutex_t mutex) int __objc_condition_allocate(objc_condition_t condition) { - if (pthread_cond_init((pthread_cond_t *)(&(condition->backend)), NULL)) - return -1; - else - return 0; + condition->backend = objc_malloc(sizeof(pthread_cond_t)); + + if (pthread_cond_init((pthread_cond_t *)condition->backend, NULL)) + { + objc_free(condition->backend); + condition->backend = NULL; + return -1; + } + + return 0; } /* Deallocate a condition. */ int __objc_condition_deallocate(objc_condition_t condition) { - return pthread_cond_destroy((pthread_cond_t *)(&(condition->backend))); + if (pthread_cond_destroy((pthread_cond_t *)condition->backend)) + return -1; + + objc_free(condition->backend); + condition->backend = NULL; + return 0; } /* Wait on the condition */ int __objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex) { - return pthread_cond_wait((pthread_cond_t *)(&(condition->backend)), - (pthread_mutex_t *)(&(mutex->backend))); + return pthread_cond_wait((pthread_cond_t *)condition->backend, + (pthread_mutex_t *)mutex->backend); } /* Wake up all threads waiting on this condition. */ int __objc_condition_broadcast(objc_condition_t condition) { - return pthread_cond_broadcast((pthread_cond_t *)(&(condition->backend))); + return pthread_cond_broadcast((pthread_cond_t *)condition->backend); } /* Wake up one thread waiting on this condition. */ int __objc_condition_signal(objc_condition_t condition) { - return pthread_cond_signal((pthread_cond_t *)(&(condition->backend))); + return pthread_cond_signal((pthread_cond_t *)condition->backend); } /* End of File */ |