summaryrefslogtreecommitdiffstats
path: root/libjava/java/lang
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-24 22:48:33 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-24 22:48:33 +0000
commit0e306e0a8846851477785f3b33c99512b26ab783 (patch)
treede416528940c92c7487c2e3625d257a047026d0d /libjava/java/lang
parentf17c1d00667e1ba9c80876a618ab047076e13db7 (diff)
downloadppe42-gcc-0e306e0a8846851477785f3b33c99512b26ab783.tar.gz
ppe42-gcc-0e306e0a8846851477785f3b33c99512b26ab783.zip
* java/lang/natClassLoader.cc (_Jv_UnregisterClass): Handle case
where class' name is NULL. (_Jv_FindClass): Don't wait for class state. * java/lang/natVMClassLoader.cc (defineClass): Only unregister if name found. * include/java-interp.h (_Jv_DefineClass): Updated. * defineclass.cc (_Jv_DefineClass): Added 'name_result' argument. (struct _Jv_ClassReader): Likewise. (found_name): New field. (handleClassBegin): Set *found_name. (_Jv_VerifyMethodSignature): Handle case where ptr==NULL. (handleClassBegin): Throw error if super class not set. (read_methods): Correctly call check_tag and prepare_pool_entry. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101301 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/lang')
-rw-r--r--libjava/java/lang/natClassLoader.cc10
-rw-r--r--libjava/java/lang/natVMClassLoader.cc6
2 files changed, 8 insertions, 8 deletions
diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc
index fb3515b5a78..43016bf5e63 100644
--- a/libjava/java/lang/natClassLoader.cc
+++ b/libjava/java/lang/natClassLoader.cc
@@ -107,6 +107,10 @@ _Jv_FindClassInCache (_Jv_Utf8Const *name)
void
_Jv_UnregisterClass (jclass the_class)
{
+ // This can happen if the class could not be defined properly.
+ if (! the_class->name)
+ return;
+
JvSynchronize sync (&java::lang::Class::class$);
jint hash = HASH_UTF(the_class->name);
@@ -328,12 +332,6 @@ _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader)
}
}
}
- else
- {
- // We need classes to be in the hash while we're loading, so
- // that they can refer to themselves.
- _Jv_Linker::wait_for_state (klass, JV_STATE_LOADED);
- }
return klass;
}
diff --git a/libjava/java/lang/natVMClassLoader.cc b/libjava/java/lang/natVMClassLoader.cc
index 2e7b90da789..bffbfc067db 100644
--- a/libjava/java/lang/natVMClassLoader.cc
+++ b/libjava/java/lang/natVMClassLoader.cc
@@ -71,16 +71,18 @@ java::lang::VMClassLoader::defineClass (java::lang::ClassLoader *loader,
klass->name = name2;
}
+ _Jv_Utf8Const *found_name = NULL;
try
{
- _Jv_DefineClass (klass, data, offset, length, pd);
+ _Jv_DefineClass (klass, data, offset, length, pd, &found_name);
}
catch (java::lang::Throwable *ex)
{
klass->state = JV_STATE_ERROR;
klass->notifyAll ();
- _Jv_UnregisterInitiatingLoader (klass, klass->loader);
+ if (found_name != NULL)
+ _Jv_UnregisterInitiatingLoader (klass, klass->loader);
// If EX is not a ClassNotFoundException, that's ok, because we
// account for the possibility in defineClass().
OpenPOWER on IntegriCloud