minor java.util.TreeMap bug

Archie Cobbs archie at whistle.com
Tue Sep 26 13:57:38 PDT 2000


Timothy Stack writes:
> er...  NIL.parent points to the parent node, which points to its parent
> node, and so on.

OK, now I believe you :-) Thanks for the test.

Try the patch below (my debug version of kaffe just exits instead
of throwing OutOfMemoryError for some reason, so I can't run your
test).

After this patch, NIL.parent should always stay equal to null.
Does it look right to you?

-Archie

___________________________________________________________________________
Archie Cobbs   *   Whistle Communications, Inc.  *   http://www.whistle.com

--- kaffe/libraries/javalib/java/util/TreeMap.java	Mon Sep 25 11:33:46 2000
+++ java/util/TreeMap.java	Tue Sep 26 13:53:17 2000
@@ -13,6 +13,7 @@
  * Author: Archie L. Cobbs <archie at whistle.com>
  *
  * Based on an (unrestricted) C version by: Thomas Niemann <niemannt at home.com>
+ * most recently sited at: http://wannabe.guru.org/alg/node21.html
  */
 
 package java.util;
@@ -313,7 +314,7 @@
 			for (y = node.right; y.left != NIL; y = y.left);
 		}
 
-		// Set x to y's only child
+		// Set x to y's only child, or NIL if no children
 		if (y.left != NIL) {
 			x = y.left;
 		} else {
@@ -321,7 +322,8 @@
 		}
 
 		// Remove y from the parent chain
-		x.parent = y.parent;
+		if (x != NIL)
+			x.parent = y.parent;
 		if (y.parent != null) {
 			if (y == y.parent.left) {
 				y.parent.left = x;
@@ -337,7 +339,7 @@
 			node.value = y.value;
 		}
 
-		if (y.color == BLACK) {
+		if (y.color == BLACK && x != NIL) {
 			deleteFixup(x);
 		}
 	}


More information about the kaffe mailing list