FULL PRODUCT VERSION :
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
glibc-2.2.4-29
Linux 2.4.7-10smp #1 SMP Thu Sep 6 17:09:31 EDT 2001 i686
redhat-release
A DESCRIPTION OF THE PROBLEM :
Preferences.removeNode() bug causes IllegalStateException
When a node is removed that has child nodes and the 1st child nodes can be removed ok, but 1 or more of the other child nodes can not be removed at this time then an IllegalStateException will happen when it comes to to sync the preferences.
The problem is caused by the BackingStoreException thrown by removeNodeSpi() causing removeNode2() to throw a BackingStoreException before calling kidCache.clear(), hence some of the kids in the cache have been removed causing sync2() to fail with an IllegalStateException.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
run code
when told to 'Change node1B so that it can't be deleted and Press Enter to Continue...' change node1B (e.g. call chmod 555 on the node1B directory) and press Enter
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
no exception
ACTUAL -
IllegalStateException
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.IllegalStateException: Node has been removed
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1311)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync(AbstractPreferences.java:1303)
at java.util.prefs.FileSystemPreferences.sync(FileSystemPreferences.java:731)
at java.util.prefs.FileSystemPreferences.flush(FileSystemPreferences.java:807)
at java.util.prefs.FileSystemPreferences.syncWorld(FileSystemPreferences.java:451)
at java.util.prefs.FileSystemPreferences.access$1200(FileSystemPreferences.java:33)
at java.util.prefs.FileSystemPreferences$5$1.run(FileSystemPreferences.java:429)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.*;
import java.util.prefs.*;
public class Test {
public static void main(String[] args) {
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
e.printStackTrace();
}
});
Preferences root = Preferences.systemRoot();
Preferences node1 = root.node("node1");
Preferences node1A = node1.node("node1A");
Preferences node1B = node1.node("node1B");
System.out.println("Change node1B so that it can't be deleted and Press Enter to Continue...");
try {
System.in.read();
}
catch (IOException ex) {
}
try {
node1.removeNode();
}
catch (BackingStoreException ex) {
}
}
}
---------- END SOURCE ----------
###@###.### 10/12/04 22:52 GMT
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
glibc-2.2.4-29
Linux 2.4.7-10smp #1 SMP Thu Sep 6 17:09:31 EDT 2001 i686
redhat-release
A DESCRIPTION OF THE PROBLEM :
Preferences.removeNode() bug causes IllegalStateException
When a node is removed that has child nodes and the 1st child nodes can be removed ok, but 1 or more of the other child nodes can not be removed at this time then an IllegalStateException will happen when it comes to to sync the preferences.
The problem is caused by the BackingStoreException thrown by removeNodeSpi() causing removeNode2() to throw a BackingStoreException before calling kidCache.clear(), hence some of the kids in the cache have been removed causing sync2() to fail with an IllegalStateException.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
run code
when told to 'Change node1B so that it can't be deleted and Press Enter to Continue...' change node1B (e.g. call chmod 555 on the node1B directory) and press Enter
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
no exception
ACTUAL -
IllegalStateException
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.IllegalStateException: Node has been removed
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1311)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)
at java.util.prefs.AbstractPreferences.sync(AbstractPreferences.java:1303)
at java.util.prefs.FileSystemPreferences.sync(FileSystemPreferences.java:731)
at java.util.prefs.FileSystemPreferences.flush(FileSystemPreferences.java:807)
at java.util.prefs.FileSystemPreferences.syncWorld(FileSystemPreferences.java:451)
at java.util.prefs.FileSystemPreferences.access$1200(FileSystemPreferences.java:33)
at java.util.prefs.FileSystemPreferences$5$1.run(FileSystemPreferences.java:429)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.*;
import java.util.prefs.*;
public class Test {
public static void main(String[] args) {
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
e.printStackTrace();
}
});
Preferences root = Preferences.systemRoot();
Preferences node1 = root.node("node1");
Preferences node1A = node1.node("node1A");
Preferences node1B = node1.node("node1B");
System.out.println("Change node1B so that it can't be deleted and Press Enter to Continue...");
try {
System.in.read();
}
catch (IOException ex) {
}
try {
node1.removeNode();
}
catch (BackingStoreException ex) {
}
}
}
---------- END SOURCE ----------
###@###.### 10/12/04 22:52 GMT