diff --git a/src/mempool.c b/src/mempool.c index 43696e81..bc1a6587 100644 --- a/src/mempool.c +++ b/src/mempool.c @@ -46,6 +46,10 @@ sos_alloc (size_t size) char *mem; #ifdef HAVE_CMPXCHG + union { + long *lp; + char *cp; + } u; char *old_mem; size = (size + MAX_ALIGN - 1) & -MAX_ALIGN; @@ -57,8 +61,9 @@ sos_alloc (size_t size) mem += size; if (mem >= sos_memory + sizeof (sos_memory)) abort (); + u.cp = sos_memp; } - while (cmpxchg_ptr (&sos_memp, old_mem, mem) != old_mem); + while (cmpxchg_ptr (&u.lp, old_mem, mem) != old_mem); #else static pthread_mutex_t sos_lock = PTHREAD_MUTEX_INITIALIZER; sigset_t saved_sigmask;