aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@phys.uva.nl>1998-05-08 02:04:27 +0200
committerJeff Law <law@gcc.gnu.org>1998-05-07 18:04:27 -0600
commit96bdc4337046ab13f90361aa464fd9cedda6674b (patch)
tree3c45734e125490e741e4b458e3c3ebff3b478c56
parent8eeeacaf54d7bac0526f9aeac34265a45b9171f0 (diff)
downloadgcc-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/ChangeLog13
-rw-r--r--gcc/objc/thr-posix.c59
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 */