Revision: 57076
http://sourceforge.net/p/brlcad/code/57076
Author: brlcad
Date: 2013-08-22 19:40:00 +0000 (Thu, 22 Aug 2013)
Log Message:
-----------
utilize the new BU_SEM_MALLOC semaphore instead of BU_SEM_SYSCALL since this
has been a historic source of confusion and unnecessary debugging hell. remove
a few fprintf-wrapped locks as well since there are considerably more that
remain unprotected, at least until a need is observed.
Modified Paths:
--------------
brlcad/trunk/src/libbu/malloc.c
Modified: brlcad/trunk/src/libbu/malloc.c
===================================================================
--- brlcad/trunk/src/libbu/malloc.c 2013-08-22 19:38:15 UTC (rev 57075)
+++ brlcad/trunk/src/libbu/malloc.c 2013-08-22 19:40:00 UTC (rev 57076)
@@ -82,7 +82,7 @@
register struct memdebug *mp = NULL;
top:
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
if (LIKELY(bu_memdebug != NULL)) {
mp = &bu_memdebug[bu_memdebug_len-1];
@@ -105,7 +105,7 @@
mp->mdb_len = cnt;
mp->mdb_str = str;
bu_memdebug_lowat = mp-1;
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
return;
}
/* Didn't find a slot. If started in middle, go again */
@@ -132,7 +132,7 @@
memset((char *)&bu_memdebug[old_len], 0,
(bu_memdebug_len-old_len) * sizeof(struct memdebug));
}
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
goto top;
}
@@ -148,10 +148,10 @@
register uint32_t *ip;
if (bu_memdebug == (struct memdebug *)0) {
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
fprintf(stderr, "memdebug_check(%p, %s) no memdebug table yet\n",
ptr, str);
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
return MEMDEBUG_NULL;
}
for (; mp >= bu_memdebug; mp--) {
@@ -161,11 +161,11 @@
if (mp->mdb_addr != ptr) continue;
ip = (uint32_t *)((char *)ptr+mp->mdb_len-sizeof(uint32_t));
if (*ip != MDB_MAGIC) {
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
fprintf(stderr, "ERROR memdebug_check(%p, %s) %s, barrier word
corrupted!\nbarrier at %p was=x%lx s/b=x%x, len=%llu\n",
ptr, str, mp->mdb_str,
(void *)ip, (unsigned long)*ip, MDB_MAGIC, (unsigned long
long)mp->mdb_len);
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
bu_bomb("memdebug_check() memory corruption\n");
}
return mp; /* OK */
@@ -230,7 +230,7 @@
}
#if defined(MALLOC_NOT_MP_SAFE)
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
#endif
/* align allocations to what address multiple */
@@ -264,7 +264,7 @@
}
#if defined(MALLOC_NOT_MP_SAFE)
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
#endif
if (UNLIKELY(ptr==(char *)0)) {
@@ -285,14 +285,14 @@
mp->m.mdb_addr = ptr;
mp->m.mdb_len = cnt*size;
mp->m.mdb_str = str;
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
if (bu_memq == BU_LIST_NULL) {
bu_memq = &bu_memqhd;
BU_LIST_INIT(bu_memq);
}
BU_LIST_APPEND(bu_memq, &(mp->q));
BU_LIST_MAGIC_SET(&(mp->q), MDB_MAGIC);
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
}
bu_n_malloc++;
return ptr;
@@ -321,10 +321,9 @@
str = nul;
if (UNLIKELY(bu_debug&BU_DEBUG_MEM_LOG)) {
- bu_semaphore_acquire(BU_SEM_SYSCALL);
fprintf(stderr, "%p free %s\n", ptr, str);
- bu_semaphore_release(BU_SEM_SYSCALL);
}
+
if (UNLIKELY(ptr == (char *)0 || ptr == (char *)(-1L))) {
fprintf(stderr, "%p free ERROR %s\n", ptr, str);
return;
@@ -343,14 +342,14 @@
fprintf(stderr, "ERROR bu_free(%p, %s) pointer bad, or not
allocated with bu_malloc! Ignored.\n", ptr, str);
} else {
ptr = (genptr_t)mp;
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
BU_LIST_DEQUEUE(&(mp->q));
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
}
}
#if defined(MALLOC_NOT_MP_SAFE)
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
#endif
/* Here we wipe out the first four bytes before the actual free()
@@ -364,7 +363,7 @@
free(ptr);
#if defined(MALLOC_NOT_MP_SAFE)
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
#endif
bu_n_free++;
}
@@ -447,11 +446,11 @@
original_ptr = ptr;
#if defined(MALLOC_NOT_MP_SAFE)
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
#endif
ptr = realloc(ptr, siz);
#if defined(MALLOC_NOT_MP_SAFE)
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
#endif
/* If realloc returns NULL then it failed to allocate the
@@ -463,7 +462,6 @@
}
if (UNLIKELY(ptr==(char *)0 || bu_debug&BU_DEBUG_MEM_LOG)) {
- bu_semaphore_acquire(BU_SEM_SYSCALL);
if (ptr == original_ptr) {
fprintf(stderr, "%p realloc%6d %s [grew in place]\n",
ptr, (int)siz, str);
@@ -471,13 +469,11 @@
fprintf(stderr, "%p realloc%6d %s [moved from %p]\n",
ptr, (int)siz, str, original_ptr);
}
-
- bu_semaphore_release(BU_SEM_SYSCALL);
}
if (UNLIKELY(bu_debug&BU_DEBUG_MEM_CHECK && ptr)) {
/* Even if ptr didn't change, need to update siz & barrier */
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
mp->mdb_addr = ptr;
mp->mdb_len = siz;
@@ -486,10 +482,10 @@
* above.
*/
*((uint32_t *)(((char *)ptr)+siz-sizeof(uint32_t))) = MDB_MAGIC;
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
} else if (UNLIKELY(bu_debug&BU_DEBUG_MEM_QCHECK && ptr)) {
struct memqdebug *mqp;
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
mqp = (struct memqdebug *)ptr;
ptr = (genptr_t)(((struct memqdebug *)ptr)+1);
mqp->m.magic = MDB_MAGIC;
@@ -499,7 +495,7 @@
BU_ASSERT(bu_memq != BU_LIST_NULL);
BU_LIST_APPEND(bu_memq, &(mqp->q));
BU_LIST_MAGIC_SET(&(mqp->q), MDB_MAGIC);
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
}
bu_n_realloc++;
return ptr;
@@ -660,25 +656,25 @@
fprintf(stderr, "bu_mem_barriercheck() no memdebug table yet\n");
return 0;
}
- bu_semaphore_acquire(BU_SEM_SYSCALL);
+ bu_semaphore_acquire(BU_SEM_MALLOC);
for (; mp >= bu_memdebug; mp--) {
if (!mp->magic) continue;
if (mp->magic != MDB_MAGIC) {
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
fprintf(stderr, " mp->magic = x%lx, s/b=x%x\n", (unsigned
long)(mp->magic), MDB_MAGIC);
bu_bomb("bu_mem_barriercheck() malloc tracing table corrupted!\n");
}
if (mp->mdb_len == 0) continue;
ip = (uint32_t *)(((char *)mp->mdb_addr)+mp->mdb_len-sizeof(uint32_t));
if (*ip != MDB_MAGIC) {
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
fprintf(stderr, "ERROR bu_mem_barriercheck(%p, len=%llu) barrier
word corrupted!\n\tbarrier at %p was=x%lx s/b=x%x %s\n",
mp->mdb_addr, (unsigned long long)mp->mdb_len,
(void *)ip, (unsigned long)*ip, MDB_MAGIC, mp->mdb_str);
return -1; /* FAIL */
}
}
- bu_semaphore_release(BU_SEM_SYSCALL);
+ bu_semaphore_release(BU_SEM_MALLOC);
return 0; /* OK */
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and
AppDynamics. Performance Central is your source for news, insights,
analysis and resources for efficient Application Performance Management.
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits