diff options
Diffstat (limited to 'libjava/java')
-rw-r--r-- | libjava/java/io/ObjectInputStream.java | 38 | ||||
-rw-r--r-- | libjava/java/io/natObjectInputStream.cc | 37 | ||||
-rw-r--r-- | libjava/java/lang/System.java | 21 | ||||
-rw-r--r-- | libjava/java/lang/natSystem.cc | 32 |
4 files changed, 54 insertions, 74 deletions
diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java index 2a90ba3..595e9de 100644 --- a/libjava/java/io/ObjectInputStream.java +++ b/libjava/java/io/ObjectInputStream.java @@ -27,6 +27,8 @@ executable file might be covered by the GNU General Public License. */ package java.io; +import gnu.classpath.Configuration; + import java.lang.reflect.Array; import java.lang.reflect.Modifier; import java.util.Arrays; @@ -61,6 +63,21 @@ public class ObjectInputStream extends InputStream public ObjectInputStream (InputStream in) throws IOException, StreamCorruptedException { + if (Configuration.DEBUG) + { + String val = System.getProperty("gcj.dumpobjects"); + if (dump == false && val != null && !val.equals("")) + { + dump = true; + System.out.println ("Serialization debugging enabled"); + } + else if (dump == true && (val == null || val.equals(""))) + { + dump = false; + System.out.println ("Serialization debugging disabled"); + } + } + this.resolveEnabled = false; this.isDeserializing = false; this.blockDataPosition = 0; @@ -1510,24 +1527,19 @@ public class ObjectInputStream extends InputStream private boolean fieldsAlreadyRead; private Vector validators; - private static boolean dump; - public native static void setDump (boolean dump); - private native void dumpElement (String msg); - private native void dumpElementln (String msg); - + private static boolean dump; -/* FIXME: These 2 methods cause a build error on i686-pc-linux-gnu. - private void DEBUG (String msg) + private void dumpElement (String msg) { - System.out.print (msg); + if (Configuration.DEBUG && dump) + System.out.print(msg); } - - - private void DEBUGln (String msg) + + private void dumpElementln (String msg) { - System.out.println (msg); + if (Configuration.DEBUG && dump) + System.out.println(msg); } -* end FIXME */ } diff --git a/libjava/java/io/natObjectInputStream.cc b/libjava/java/io/natObjectInputStream.cc index ac72ecf..856f6e2 100644 --- a/libjava/java/io/natObjectInputStream.cc +++ b/libjava/java/io/natObjectInputStream.cc @@ -78,40 +78,3 @@ java::io::ObjectInputStream::getMethod (jclass klass, jstring name, { return klass->getPrivateMethod (name, arg_types); } - -#ifdef DEBUG -void -java::io::ObjectInputStream::setDump (jboolean dump) -{ - java::io::ObjectInputStream::dump = dump; -} - -void -java::io::ObjectInputStream::dumpElement (jstring msg) -{ - if (dump) - java::lang::System::out->print (msg); -} - -void -java::io::ObjectInputStream::dumpElementln (jstring msg) -{ - if (dump) - java::lang::System::out->println (msg); -} -#else -void -java::io::ObjectInputStream::setDump (jboolean dump) -{ -} - -void -java::io::ObjectInputStream::dumpElement (jstring msg) -{ -} - -void -java::io::ObjectInputStream::dumpElementln (jstring msg) -{ -} -#endif diff --git a/libjava/java/lang/System.java b/libjava/java/lang/System.java index 52dbe75..59787099 100644 --- a/libjava/java/lang/System.java +++ b/libjava/java/lang/System.java @@ -63,7 +63,8 @@ public final class System { if (secman != null) secman.checkPropertiesAccess(); - init_properties (); + if (properties == null) + init_properties (); return properties; } @@ -71,7 +72,8 @@ public final class System { if (secman != null) secman.checkPropertyAccess(property); - init_properties (); + if (properties == null) + init_properties (); return properties.getProperty(property); } @@ -79,7 +81,8 @@ public final class System { if (secman != null) secman.checkPropertyAccess(property, defval); - init_properties (); + if (properties == null) + init_properties (); return properties.getProperty(property, defval); } @@ -128,15 +131,18 @@ public final class System { if (secman != null) secman.checkPropertiesAccess(); - // We might not have initialized yet. - prop_init = true; - properties = props; + synchronized (System.class) + { + properties = props; + } } public static String setProperty (String key, String value) { if (secman != null) secman.checkPermission (new PropertyPermission (key, "write")); + if (properties == null) + init_properties (); return (String) properties.setProperty (key, value); } @@ -165,7 +171,4 @@ public final class System // Private data. private static SecurityManager secman = null; private static Properties properties = null; - // This boolean is only required for 1.1 and earlier. After 1.1, a - // null properties should always be re-initialized. - private static boolean prop_init = false; } diff --git a/libjava/java/lang/natSystem.cc b/libjava/java/lang/natSystem.cc index 35198fb..57133fb 100644 --- a/libjava/java/lang/natSystem.cc +++ b/libjava/java/lang/natSystem.cc @@ -217,18 +217,16 @@ getpwuid_adaptor(T_passwd * (*getpwuid_r)(T_uid user_id, T_passwd *pwd_r, void java::lang::System::init_properties (void) { - { - // We only need to synchronize around this gatekeeper. - JvSynchronize sync (&java::lang::System::class$); - if (prop_init) - return; - prop_init = true; - } - - properties = new java::util::Properties (); + JvSynchronize sync (&java::lang::System::class$); + + if (properties != NULL) + return; + + java::util::Properties* newprops = new java::util::Properties (); + // A convenience define. #define SET(Prop,Val) \ - properties->put(JvNewStringLatin1 (Prop), JvNewStringLatin1 (Val)) + newprops->put(JvNewStringLatin1 (Prop), JvNewStringLatin1 (Val)) // A mixture of the Java Product Versioning Specification // (introduced in 1.2), and earlier versioning properties. @@ -351,7 +349,7 @@ java::lang::System::init_properties (void) ; jstring name = JvNewStringLatin1 (p, s - p); jstring val = JvNewStringLatin1 (*s == '=' ? s + 1 : s); - properties->put (name, val); + newprops->put (name, val); } // Set the system properties from the user's environment. @@ -368,13 +366,13 @@ java::lang::System::init_properties (void) } if (_Jv_Jar_Class_Path) - properties->put(JvNewStringLatin1 ("java.class.path"), - JvNewStringLatin1 (_Jv_Jar_Class_Path)); + newprops->put(JvNewStringLatin1 ("java.class.path"), + JvNewStringLatin1 (_Jv_Jar_Class_Path)); else { // FIXME: find libgcj.zip and append its path? char *classpath = ::getenv("CLASSPATH"); - jstring cp = properties->getProperty (JvNewStringLatin1("java.class.path")); + jstring cp = newprops->getProperty (JvNewStringLatin1("java.class.path")); java::lang::StringBuffer *sb = new java::lang::StringBuffer (); if (classpath) @@ -391,7 +389,11 @@ java::lang::System::init_properties (void) else sb->append ((jchar) '.'); - properties->put(JvNewStringLatin1 ("java.class.path"), + newprops->put(JvNewStringLatin1 ("java.class.path"), sb->toString ()); } + // Finally, set the field. This ensures that concurrent getProperty() + // calls will return initialized values without requiring them to be + // synchronized in the common case. + properties = newprops; } |