aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/io/ObjectInputStream.java38
-rw-r--r--libjava/java/io/natObjectInputStream.cc37
-rw-r--r--libjava/java/lang/System.java21
-rw-r--r--libjava/java/lang/natSystem.cc32
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;
}