Index: /trunk/psLib/src/sys/psMemory.c
===================================================================
--- /trunk/psLib/src/sys/psMemory.c	(revision 635)
+++ /trunk/psLib/src/sys/psMemory.c	(revision 636)
@@ -8,6 +8,6 @@
  *  @author Robert Lupton, Princeton University
  *
- *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-04-20 03:10:31 $
+ *  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-05-11 01:57:54 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -19,4 +19,6 @@
 #include <stdlib.h>
 #include <stdio.h>
+#include <stdbool.h>
+
 #include "psMemory.h"
 #include "psError.h"
@@ -44,5 +46,5 @@
 static psMemExhaustedCallback memExhaustedCallback = memExhaustedCallbackDefault;
 
-psMemExhaustedCallback psMemExhaustedSetCallback(psMemExhaustedCallback func)
+psMemExhaustedCallback psMemExhaustedCallbackSet(psMemExhaustedCallback func)
 {
     psMemExhaustedCallback old = memExhaustedCallback;
@@ -78,5 +80,5 @@
 static psMemProblemCallback memProblemCallback = memProblemCallbackDefault;
 
-psMemProblemCallback psMemProblemSetCallback(psMemProblemCallback func)
+psMemProblemCallback psMemProblemCallbackSet(psMemProblemCallback func)
 {
     psMemProblemCallback old = memProblemCallback;
@@ -140,5 +142,5 @@
 static psMemFreeCallback memFreeCallback = memFreeCallbackDefault;
 
-psMemAllocateCallback psMemAllocateSetCallback(psMemAllocateCallback func)
+psMemAllocateCallback psMemAllocateCallbackSet(psMemAllocateCallback func)
 {
     psMemFreeCallback old = memAllocateCallback;
@@ -199,5 +201,6 @@
 
     if (m->startblock != P_PS_MEMMAGIC || m->endblock != P_PS_MEMMAGIC) {
-        psError(funcName, "psMemCheckCorruption: memory block %ld is corrupted", m->id);
+        psError(funcName, "psMemCheckCorruption: memory block %ld is corrupted (%x %x)",
+                m->id,m->startblock,m->endblock);
         return(1);
     }
@@ -280,8 +283,20 @@
     } else {
         psMemBlock *ptr = ((psMemBlock *)vptr) - 1;
+        bool isBlockLast = false;
 
         pthread_mutex_lock(&memBlockListMutex);
 
+        isBlockLast = (ptr == lastMemBlockAllocated);
+
         ptr = (psMemBlock*)realloc(ptr, sizeof(psMemBlock) + size);
+
+        if (ptr == NULL) {
+            psAbort(__func__, "Failed to reallocate %ld bytes at %s:%d",
+                    size, file, lineno);
+        }
+
+        if (isBlockLast) {
+            lastMemBlockAllocated = ptr;
+        }
 
         // the block location may have changed, so fix the linked list addresses.
Index: /trunk/psLib/src/sysUtils/psMemory.c
===================================================================
--- /trunk/psLib/src/sysUtils/psMemory.c	(revision 635)
+++ /trunk/psLib/src/sysUtils/psMemory.c	(revision 636)
@@ -8,6 +8,6 @@
  *  @author Robert Lupton, Princeton University
  *
- *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-04-20 03:10:31 $
+ *  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-05-11 01:57:54 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -19,4 +19,6 @@
 #include <stdlib.h>
 #include <stdio.h>
+#include <stdbool.h>
+
 #include "psMemory.h"
 #include "psError.h"
@@ -44,5 +46,5 @@
 static psMemExhaustedCallback memExhaustedCallback = memExhaustedCallbackDefault;
 
-psMemExhaustedCallback psMemExhaustedSetCallback(psMemExhaustedCallback func)
+psMemExhaustedCallback psMemExhaustedCallbackSet(psMemExhaustedCallback func)
 {
     psMemExhaustedCallback old = memExhaustedCallback;
@@ -78,5 +80,5 @@
 static psMemProblemCallback memProblemCallback = memProblemCallbackDefault;
 
-psMemProblemCallback psMemProblemSetCallback(psMemProblemCallback func)
+psMemProblemCallback psMemProblemCallbackSet(psMemProblemCallback func)
 {
     psMemProblemCallback old = memProblemCallback;
@@ -140,5 +142,5 @@
 static psMemFreeCallback memFreeCallback = memFreeCallbackDefault;
 
-psMemAllocateCallback psMemAllocateSetCallback(psMemAllocateCallback func)
+psMemAllocateCallback psMemAllocateCallbackSet(psMemAllocateCallback func)
 {
     psMemFreeCallback old = memAllocateCallback;
@@ -199,5 +201,6 @@
 
     if (m->startblock != P_PS_MEMMAGIC || m->endblock != P_PS_MEMMAGIC) {
-        psError(funcName, "psMemCheckCorruption: memory block %ld is corrupted", m->id);
+        psError(funcName, "psMemCheckCorruption: memory block %ld is corrupted (%x %x)",
+                m->id,m->startblock,m->endblock);
         return(1);
     }
@@ -280,8 +283,20 @@
     } else {
         psMemBlock *ptr = ((psMemBlock *)vptr) - 1;
+        bool isBlockLast = false;
 
         pthread_mutex_lock(&memBlockListMutex);
 
+        isBlockLast = (ptr == lastMemBlockAllocated);
+
         ptr = (psMemBlock*)realloc(ptr, sizeof(psMemBlock) + size);
+
+        if (ptr == NULL) {
+            psAbort(__func__, "Failed to reallocate %ld bytes at %s:%d",
+                    size, file, lineno);
+        }
+
+        if (isBlockLast) {
+            lastMemBlockAllocated = ptr;
+        }
 
         // the block location may have changed, so fix the linked list addresses.
