summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwez <wez@1665872d-e22b-0410-9e5d-a57ad4215e6d>2006-10-13 15:54:13 +0000
committerwez <wez@1665872d-e22b-0410-9e5d-a57ad4215e6d>2006-10-13 15:54:13 +0000
commitc311350b3b220f6e6ea78183a7aed217f28c3e33 (patch)
tree27e856964d727329ed93a085a427eb20993a0146
parentcebadcd9b0b9e7f515046aadbbf3003b4c3b8a97 (diff)
downloadportableumem-c311350b3b220f6e6ea78183a7aed217f28c3e33.tar.gz
merge some OSX related fixes from ecelerity
git-svn-id: https://labs.omniti.com/portableumem/trunk@26 1665872d-e22b-0410-9e5d-a57ad4215e6d
-rw-r--r--misc.h2
-rw-r--r--umem.c15
-rw-r--r--umem_fail.c13
-rw-r--r--vmem.c5
-rw-r--r--vmem_mmap.c1
5 files changed, 28 insertions, 8 deletions
diff --git a/misc.h b/misc.h
index e3fe9de..41e1fde 100644
--- a/misc.h
+++ b/misc.h
@@ -75,7 +75,7 @@ void log_message(const char *format, ...);
* returns the index of the (high/low) bit + 1
*/
int highbit(ulong_t) __attribute__ ((pure));
-int lowbit(ulong_t) __attribute__ ((pure));;
+int lowbit(ulong_t) __attribute__ ((pure));
/* #pragma no_side_effect(highbit, lowbit) */
/*
diff --git a/umem.c b/umem.c
index 5e5c7d8..7dbcff1 100644
--- a/umem.c
+++ b/umem.c
@@ -480,21 +480,21 @@ size_t umem_minfirewall; /* hardware-enforced redzone threshold */
uint_t umem_flags = 0;
-mutex_t umem_init_lock; /* locks initialization */
+mutex_t umem_init_lock = DEFAULTMUTEX; /* locks initialization */
cond_t umem_init_cv = DEFAULTCV; /* initialization CV */
thread_t umem_init_thr; /* thread initializing */
int umem_init_env_ready; /* environ pre-initted */
int umem_ready = UMEM_READY_STARTUP;
static umem_nofail_callback_t *nofail_callback;
-static mutex_t umem_nofail_exit_lock;
+static mutex_t umem_nofail_exit_lock = DEFAULTMUTEX;
static thread_t umem_nofail_exit_thr;
static umem_cache_t *umem_slab_cache;
static umem_cache_t *umem_bufctl_cache;
static umem_cache_t *umem_bufctl_audit_cache;
-mutex_t umem_flags_lock;
+mutex_t umem_flags_lock = DEFAULTMUTEX;
static vmem_t *heap_arena;
static vmem_alloc_t *heap_alloc;
@@ -518,9 +518,14 @@ umem_log_header_t *umem_failure_log;
umem_log_header_t *umem_slab_log;
extern thread_t _thr_self(void);
+#if defined(__MACH__)
+# define CPUHINT() ((int)(_thr_self()))
+#endif
+
#ifndef CPUHINT
#define CPUHINT() (_thr_self())
#endif
+
#define CPUHINT_MAX() INT_MAX
#define CPU(mask) (umem_cpus + (CPUHINT() & (mask)))
@@ -542,12 +547,12 @@ volatile thread_t umem_st_update_thr; /* only used when single-thd */
thr_self() == umem_st_update_thr)
#define IN_REAP() IN_UPDATE()
-mutex_t umem_update_lock; /* cache_u{next,prev,flags} */
+mutex_t umem_update_lock = DEFAULTMUTEX; /* cache_u{next,prev,flags} */
cond_t umem_update_cv = DEFAULTCV;
volatile hrtime_t umem_reap_next; /* min hrtime of next reap */
-mutex_t umem_cache_lock; /* inter-cache linkage only */
+mutex_t umem_cache_lock = DEFAULTMUTEX; /* inter-cache linkage only */
#ifdef UMEM_STANDALONE
umem_cache_t umem_null_cache;
diff --git a/umem_fail.c b/umem_fail.c
index c8b63d0..cd468bc 100644
--- a/umem_fail.c
+++ b/umem_fail.c
@@ -41,7 +41,6 @@
#include <stdio.h>
#include "misc.h"
-/*#include "util.h"*/
static volatile int umem_exiting = 0;
#define UMEM_EXIT_ABORT 1
@@ -83,9 +82,21 @@ umem_do_abort(void)
}
for (;;) {
+#if defined(__FreeBSD__)
+ sigset_t set;
+ struct sigaction sa;
+
+ sa.sa_handler = SIG_DFL;
+ (void) sigaction(SIGABRT, &sa, NULL);
+ (void) sigemptyset (&set);
+ (void) sigaddset (&set, SIGABRT);
+ (void) sigprocmask (SIG_UNBLOCK, &set, NULL);
+ (void) raise (SIGABRT);
+#else
(void) signal(SIGABRT, SIG_DFL);
(void) sigrelse(SIGABRT);
(void) raise(SIGABRT);
+#endif
}
#endif
}
diff --git a/vmem.c b/vmem.c
index f597325..1b8981a 100644
--- a/vmem.c
+++ b/vmem.c
@@ -212,7 +212,10 @@ static vmem_seg_t vmem_seg0[VMEM_SEG_INITIAL];
static vmem_seg_t *vmem_segfree;
static mutex_t vmem_list_lock = DEFAULTMUTEX;
static mutex_t vmem_segfree_lock = DEFAULTMUTEX;
-static vmem_populate_lock_t vmem_nosleep_lock;
+static vmem_populate_lock_t vmem_nosleep_lock = {
+ DEFAULTMUTEX,
+ 0
+};
#define IN_POPULATE() (vmem_nosleep_lock.vmpl_thr == thr_self())
static vmem_t *vmem_list;
static vmem_t *vmem_internal_arena;
diff --git a/vmem_mmap.c b/vmem_mmap.c
index cbe9a2b..f59e48d 100644
--- a/vmem_mmap.c
+++ b/vmem_mmap.c
@@ -115,6 +115,7 @@ vmem_mmap_top_alloc(vmem_t *src, size_t size, int vmflags)
*/
#ifdef _WIN32
buf = VirtualAlloc(NULL, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
+ if (buf == NULL) buf = MAP_FAILED;
#else
buf = mmap(
#ifdef MAP_ALIGN