Index: trunk/psLib/src/image/psImage.c
===================================================================
--- trunk/psLib/src/image/psImage.c	(revision 1897)
+++ trunk/psLib/src/image/psImage.c	(revision 1920)
@@ -10,6 +10,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.46 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-09-25 02:06:12 $
+ *  @version $Revision: 1.47 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-09-28 23:26:48 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -68,5 +68,4 @@
     *(psElemType* ) & image->type.type = type;
     image->parent = NULL;
-    image->nChildren = 0;
     image->children = NULL;
 
@@ -81,6 +80,5 @@
 
     if (image->type.type == PS_TYPE_PTR) {
-        // 2-D array of pointers -- must
-        // dereference
+        // 2-D array of pointers -- must dereference elements
         unsigned int oldNumRows = image->numRows;
         unsigned int oldNumCols = image->numCols;
@@ -95,9 +93,13 @@
     }
 
+    if (image->parent != NULL) {
+        psArrayRemove(image->parent->children,image);
+        image->parent = NULL;
+    }
+
     psImageFreeChildren(image);
 
     psFree(image->rawDataBuffer);
     psFree(image->data.V);
-    image->data.V = NULL;
 }
 
@@ -164,7 +166,4 @@
 int psImageFreeChildren(psImage* image)
 {
-    int i = 0;
-    int nChildren = 0;
-    psImage* *children = NULL;
     int numFreed = 0;
 
@@ -173,17 +172,17 @@
     }
 
-    nChildren = image->nChildren;
-    children = image->children;
-
-    for (i = 0; i < nChildren; i++) {
-        if (children[i] != NULL) {
-            numFreed++;
-            psFree(children[i]);
+    if (image->children != NULL) {
+        psImage** children = (psImage**)image->children->data;
+        numFreed = image->children->n;
+
+        // orphan the children first
+        // (so psFree doesn't try to modify the parent's children array while I'm using it)
+        for (int i=0;i<numFreed;i++) {
+            children[i]->parent = NULL;
         }
-    }
-    psFree(children);
-
-    image->nChildren = 0;
-    image->children = NULL;
+
+        psFree(image->children);
+        image->children = NULL;
+    }
 
     return numFreed;
