Index: /branches/jch-memory/psLib/src/sys/psMemory.c
===================================================================
--- /branches/jch-memory/psLib/src/sys/psMemory.c	(revision 10909)
+++ /branches/jch-memory/psLib/src/sys/psMemory.c	(revision 10910)
@@ -9,6 +9,6 @@
 *  @author Joshua Hoblitt, University of Hawaii
 *
-*  @version $Revision: 1.88.2.17 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2007-01-05 01:58:58 $
+*  @version $Revision: 1.88.2.18 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2007-01-05 02:52:24 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -436,5 +436,5 @@
     memBlock->persistent = memory_is_persistent;
 
-    // this block will be the add as the last mem block in the list
+    // this block will be add as the last mem block in the list
     memBlock->previousBlock = NULL;
 
@@ -488,4 +488,9 @@
 
     // Reallocate the memory
+
+    // Is this the last block we allocated?  If it is, we need to keep track of
+    // this fact and update lastMemBlockAllocated *after* the realloc or
+    // lastMemBlockAllocated will be left with a bogus value
+    bool isBlockLast = (memBlock == lastMemBlockAllocated);
 
     memBlock = (psMemBlock *)realloc(memBlock, sizeof(psMemBlock) + size + sizeof(psPtr));
@@ -501,4 +506,10 @@
     }
 
+    // realloc() successed so need to update lastMemBlockAllocated if we just
+    // mucked with the last mem block
+    if (isBlockLast) {
+        lastMemBlockAllocated = memBlock;
+    }
+
     memBlock->userMemorySize = size;
     *(psPtr *)((int8_t *) (memBlock + 1) + size) = P_PS_MEMMAGIC;
@@ -770,6 +781,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_BITSET:
@@ -777,6 +786,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_CUBE:
@@ -784,6 +791,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_FITS:
@@ -791,6 +796,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_HASH:
@@ -798,6 +801,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_HISTOGRAM:
@@ -805,6 +806,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_IMAGE:
@@ -812,6 +811,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_KERNEL:
@@ -819,6 +816,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_LINE:
@@ -826,6 +821,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_LIST:
@@ -833,6 +826,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_LOOKUPTABLE:
@@ -840,6 +831,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_METADATA:
@@ -847,6 +836,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_METADATAITEM:
@@ -854,6 +841,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_MINIMIZATION:
@@ -861,6 +846,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_PIXELS:
@@ -868,6 +851,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_PLANE:
@@ -875,6 +856,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_PLANEDISTORT:
@@ -882,6 +861,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_PLANETRANSFORM:
@@ -889,6 +866,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_POLYNOMIAL1D:
@@ -896,6 +871,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_POLYNOMIAL2D:
@@ -903,6 +876,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_POLYNOMIAL3D:
@@ -910,6 +881,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_POLYNOMIAL4D:
@@ -917,6 +886,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_PROJECTION:
@@ -924,6 +891,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_REGION:
@@ -931,6 +896,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_SCALAR:
@@ -938,6 +901,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_SPHERE:
@@ -945,6 +906,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_SPHEREROT:
@@ -952,6 +911,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_SPLINE1D:
@@ -959,6 +916,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_STATS:
@@ -966,6 +921,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_STRING:
@@ -973,6 +926,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_TIME:
@@ -980,6 +931,4 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     case PS_DATA_VECTOR:
@@ -987,11 +936,12 @@
             return true;
         }
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_VALUE, false,
-                     "Incorrect pointer.  Datatypes do not match.\n");
         break;
     default:
-        PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_TYPE, true,
-                     "Invalid datatype specified.\n");
-    }
+        // error state -- fall through to returning false
+        break;
+    }
+
+    PS_MEM_ERROR(PS_ERR_BAD_PARAMETER_TYPE, true,
+                 "Invalid datatype specified.\n");
 
     return false;
