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

Reply via email to