Index: trunk/psLib/src/sysUtils/psMemory.c
===================================================================
--- trunk/psLib/src/sysUtils/psMemory.c	(revision 3682)
+++ trunk/psLib/src/sysUtils/psMemory.c	(revision 3784)
@@ -8,6 +8,6 @@
 *  @author Robert Lupton, Princeton University
 *
-*  @version $Revision: 1.50 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-04-07 20:27:41 $
+*  @version $Revision: 1.51 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-04-29 00:39:22 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -80,72 +80,4 @@
 
     return ptr;
-}
-
-static psMemExhaustedCallback memExhaustedCallback = memExhaustedCallbackDefault;
-
-psMemExhaustedCallback psMemExhaustedCallbackSet(psMemExhaustedCallback func)
-{
-    psMemExhaustedCallback old = memExhaustedCallback;
-
-    if (func != NULL) {
-        memExhaustedCallback = func;
-    } else {
-        memExhaustedCallback = memExhaustedCallbackDefault;
-    }
-
-    return old;
-}
-
-static void memProblemCallbackDefault(const psMemBlock* ptr, const char *file, psS32 lineno)
-{
-    if (ptr->refCounter < 1) {
-        psError(PS_ERR_MEMORY_CORRUPTION, false,
-                PS_ERRORTEXT_psMemory_MULTIPLE_FREE,
-                ptr->id, ptr->file, ptr->lineno, file, lineno);
-    }
-
-    if (lineno > 0) {
-        psAbort(__func__, "Detected a problem in the memory system at %s:%d", file, lineno);
-    }
-}
-static psMemProblemCallback memProblemCallback = memProblemCallbackDefault;
-
-psMemProblemCallback psMemProblemCallbackSet(psMemProblemCallback func)
-{
-    psMemProblemCallback old = memProblemCallback;
-
-    if (func != NULL) {
-        memProblemCallback = func;
-    } else {
-        memProblemCallback = memProblemCallbackDefault;
-    }
-
-    return old;
-}
-
-/*
- * And now the I-want-to-be-informed callbacks
- *
- * Call the callbacks when these IDs are allocated/freed
- */
-psMemoryId p_psMemAllocateID = 0;       // notify user this block is allocated
-psMemoryId p_psMemFreeID = 0;   // notify user this block is freed
-
-psMemoryId psMemAllocateCallbackSetID(psMemoryId id)
-{
-    psMemoryId old = p_psMemAllocateID;
-
-    p_psMemAllocateID = id;
-
-    return old;
-}
-
-psMemoryId psMemFreeCallbackSetID(psMemoryId id)
-{
-    psMemoryId old = p_psMemFreeID;
-
-    p_psMemFreeID = id;
-
-    return old;
 }
 
@@ -170,48 +102,15 @@
 }
 
-/*
- * The default callbacks, and the routines to change them
- */
-static psMemAllocateCallback memAllocateCallback = memAllocateCallbackDefault;
-static psMemFreeCallback memFreeCallback = memFreeCallbackDefault;
-
-psMemAllocateCallback psMemAllocateCallbackSet(psMemAllocateCallback func)
-{
-    psMemFreeCallback old = memAllocateCallback;
-
-    if (func != NULL) {
-        memAllocateCallback = func;
-    } else {
-        memAllocateCallback = memAllocateCallbackDefault;
-    }
-
-    return old;
-}
-
-psMemFreeCallback psMemFreeCallbackSet(psMemFreeCallback func)
-{
-    psMemFreeCallback old = memFreeCallback;
-
-    if (func != NULL) {
-        memFreeCallback = func;
-    } else {
-        memFreeCallback = memFreeCallbackDefault;
-    }
-
-    return old;
-}
-
-/*
- * Return memory ID counter for next block to be allocated
- */
-psMemoryId psMemGetId(void)
-{
-    psMemoryId id;
-
-    pthread_mutex_lock(&memIdMutex);
-    id = memid + 1;
-    pthread_mutex_unlock(&memIdMutex);
-
-    return id;
+static void memProblemCallbackDefault(const psMemBlock* ptr, const char *file, psS32 lineno)
+{
+    if (ptr->refCounter < 1) {
+        psError(PS_ERR_MEMORY_CORRUPTION, false,
+                PS_ERRORTEXT_psMemory_MULTIPLE_FREE,
+                ptr->id, ptr->file, ptr->lineno, file, lineno);
+    }
+
+    if (lineno > 0) {
+        psAbort(__func__, "Detected a problem in the memory system at %s:%d", file, lineno);
+    }
 }
 
@@ -221,5 +120,4 @@
  * N.b. If the block wasn't allocated by psAlloc, it will appear corrupted
  */
-
 static psS32 checkMemBlock(const psMemBlock* m, const char *funcName)
 {
@@ -255,4 +153,104 @@
 
     return 0;
+}
+
+/*
+ * The default callbacks
+ */
+static psMemAllocateCallback memAllocateCallback = memAllocateCallbackDefault;
+static psMemFreeCallback memFreeCallback = memFreeCallbackDefault;
+static psMemProblemCallback memProblemCallback = memProblemCallbackDefault;
+static psMemExhaustedCallback memExhaustedCallback = memExhaustedCallbackDefault;
+
+psMemExhaustedCallback psMemExhaustedCallbackSet(psMemExhaustedCallback func)
+{
+    psMemExhaustedCallback old = memExhaustedCallback;
+
+    if (func != NULL) {
+        memExhaustedCallback = func;
+    } else {
+        memExhaustedCallback = memExhaustedCallbackDefault;
+    }
+
+    return old;
+}
+
+psMemProblemCallback psMemProblemCallbackSet(psMemProblemCallback func)
+{
+    psMemProblemCallback old = memProblemCallback;
+
+    if (func != NULL) {
+        memProblemCallback = func;
+    } else {
+        memProblemCallback = memProblemCallbackDefault;
+    }
+
+    return old;
+}
+
+/*
+ * And now the I-want-to-be-informed callbacks
+ *
+ * Call the callbacks when these IDs are allocated/freed
+ */
+psMemoryId p_psMemAllocateID = 0;       // notify user this block is allocated
+psMemoryId p_psMemFreeID = 0;   // notify user this block is freed
+
+psMemoryId psMemAllocateCallbackSetID(psMemoryId id)
+{
+    psMemoryId old = p_psMemAllocateID;
+
+    p_psMemAllocateID = id;
+
+    return old;
+}
+
+psMemoryId psMemFreeCallbackSetID(psMemoryId id)
+{
+    psMemoryId old = p_psMemFreeID;
+
+    p_psMemFreeID = id;
+
+    return old;
+}
+
+psMemAllocateCallback psMemAllocateCallbackSet(psMemAllocateCallback func)
+{
+    psMemFreeCallback old = memAllocateCallback;
+
+    if (func != NULL) {
+        memAllocateCallback = func;
+    } else {
+        memAllocateCallback = memAllocateCallbackDefault;
+    }
+
+    return old;
+}
+
+psMemFreeCallback psMemFreeCallbackSet(psMemFreeCallback func)
+{
+    psMemFreeCallback old = memFreeCallback;
+
+    if (func != NULL) {
+        memFreeCallback = func;
+    } else {
+        memFreeCallback = memFreeCallbackDefault;
+    }
+
+    return old;
+}
+
+/*
+ * Return memory ID counter for next block to be allocated
+ */
+psMemoryId psMemGetId(void)
+{
+    psMemoryId id;
+
+    pthread_mutex_lock(&memIdMutex);
+    id = memid + 1;
+    pthread_mutex_unlock(&memIdMutex);
+
+    return id;
 }
 
@@ -504,4 +502,5 @@
  * Reference counting APIs
  */
+
 // return refCounter
 psReferenceCount psMemGetRefCounter(psPtr vptr)
@@ -563,4 +562,9 @@
     }
 
+    // Did the user ask to be informed about this deallocation?
+    if (ptr->id == p_psMemFreeID) {
+        p_psMemFreeID += memFreeCallback(ptr);
+    }
+
     pthread_mutex_lock(&ptr->refCounterMutex);
 
@@ -571,9 +575,4 @@
     } else {
         pthread_mutex_unlock(&ptr->refCounterMutex);
-
-        // Did the user ask to be informed about this deallocation?
-        if (ptr->id == p_psMemFreeID) {
-            p_psMemFreeID += memFreeCallback(ptr);
-        }
 
         if (ptr->freeFcn != NULL) {
