summaryrefslogtreecommitdiff
path: root/src/mi
diff options
context:
space:
mode:
authorhp.com!davidm <hp.com!davidm>2005-05-03 09:13:17 +0000
committerhp.com!davidm <hp.com!davidm>2005-05-03 09:13:17 +0000
commitb38691980f4e0c1cf0e2309aa6cc35decc6b9cb7 (patch)
treedd06c407df96067284ba350bb6fc74b253b94a37 /src/mi
parent7e0192f53ab2a85ba99bc36365ab18bdadf48677 (diff)
downloadlibunwind-b38691980f4e0c1cf0e2309aa6cc35decc6b9cb7.tar.gz
(sos_alloc): Fix soslock vs. sos_lock typo.
2005/02/23 14:40:44-08:00 mostang.com!davidm Adjust for sigset_t to intrmask_t renaming. (Logical change 1.290)
Diffstat (limited to 'src/mi')
-rw-r--r--src/mi/mempool.c53
1 files changed, 17 insertions, 36 deletions
diff --git a/src/mi/mempool.c b/src/mi/mempool.c
index c8b75842..a37ea403 100644
--- a/src/mi/mempool.c
+++ b/src/mi/mempool.c
@@ -1,5 +1,5 @@
/* libunwind - a platform-independent unwind library
- Copyright (C) 2002-2003 Hewlett-Packard Co
+ Copyright (C) 2002-2003, 2005 Hewlett-Packard Co
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
This file is part of libunwind.
@@ -57,46 +57,31 @@ sos_alloc (size_t size)
mem = (char *) (((unsigned long) old_mem + MAX_ALIGN - 1) & -MAX_ALIGN);
mem += size;
- if (mem >= sos_memory + sizeof (sos_memory))
- abort ();
+ assert (mem < sos_memory + sizeof (sos_memory));
}
while (!cmpxchg_ptr (&sos_memp, old_mem, mem));
#else
- static pthread_mutex_t sos_lock = PTHREAD_MUTEX_INITIALIZER;
- sigset_t saved_sigmask;
+ static define_lock (sos_lock);
+ intrmask_t saved_mask;
size = (size + MAX_ALIGN - 1) & -MAX_ALIGN;
- sigprocmask (SIG_SETMASK, &unwi_full_sigmask, &saved_sigmask);
- mutex_lock(&sos_lock);
+ lock_acquire (&sos_lock, saved_mask);
{
if (!sos_memp)
sos_memp = sos_memory;
mem = (char *) (((unsigned long) sos_memp + MAX_ALIGN - 1) & -MAX_ALIGN);
mem += size;
- if (mem >= sos_memory + sizeof (sos_memory))
- abort ();
+ assert (mem < sos_memory + sizeof (sos_memory));
sos_memp = mem;
}
mutex_unlock(&sos_lock);
- sigprocmask (SIG_SETMASK, &saved_sigmask, NULL);
+ sigprocmask (SIG_SETMASK, &saved_mask, NULL);
#endif
return mem;
}
-static void *
-alloc_memory (size_t size)
-{
- /* Hopefully, mmap() goes straight through to a system call stub... */
- void *mem = mmap (0, size, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- if (mem == MAP_FAILED)
- return NULL;
-
- return mem;
-}
-
/* Must be called while holding the mempool lock. */
static void
@@ -125,11 +110,11 @@ expand (struct mempool *pool)
char *mem;
size = pool->chunk_size;
- mem = alloc_memory (size);
+ GET_MEMORY (mem, size);
if (!mem)
{
size = (pool->obj_size + pg_size - 1) & -pg_size;
- mem = alloc_memory (size);
+ GET_MEMORY (mem, size);
if (!mem)
{
/* last chance: try to allocate one object from the SOS memory */
@@ -148,14 +133,14 @@ mempool_init (struct mempool *pool, size_t obj_size, size_t reserve)
memset (pool, 0, sizeof (*pool));
- mutex_init (&pool->lock);
+ lock_init (&pool->lock);
/* round object-size up to integer multiple of MAX_ALIGN */
obj_size = (obj_size + MAX_ALIGN - 1) & -MAX_ALIGN;
if (!reserve)
{
- reserve = pg_size / obj_size / 2;
+ reserve = pg_size / obj_size / 4;
if (!reserve)
reserve = 16;
}
@@ -170,11 +155,10 @@ mempool_init (struct mempool *pool, size_t obj_size, size_t reserve)
HIDDEN void *
mempool_alloc (struct mempool *pool)
{
- sigset_t saved_sigmask;
+ intrmask_t saved_mask;
struct object *obj;
- sigprocmask (SIG_SETMASK, &unwi_full_sigmask, &saved_sigmask);
- mutex_lock(&pool->lock);
+ lock_acquire (&pool->lock, saved_mask);
{
if (pool->num_free <= pool->reserve)
expand (pool);
@@ -185,21 +169,18 @@ mempool_alloc (struct mempool *pool)
obj = pool->free_list;
pool->free_list = obj->next;
}
- mutex_unlock(&pool->lock);
- sigprocmask (SIG_SETMASK, &saved_sigmask, NULL);
+ lock_release(&pool->lock, saved_mask);
return obj;
}
HIDDEN void
mempool_free (struct mempool *pool, void *object)
{
- sigset_t saved_sigmask;
+ intrmask_t saved_mask;
- sigprocmask (SIG_SETMASK, &unwi_full_sigmask, &saved_sigmask);
- mutex_lock(&pool->lock);
+ lock_acquire (&pool->lock, saved_mask);
{
free_object (pool, object);
}
- mutex_unlock(&pool->lock);
- sigprocmask (SIG_SETMASK, &saved_sigmask, NULL);
+ lock_release (&pool->lock, saved_mask);
}