diff options
Diffstat (limited to 'libjava/java/lang/natClassLoader.cc')
-rw-r--r-- | libjava/java/lang/natClassLoader.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc index ec48352..b38c2db 100644 --- a/libjava/java/lang/natClassLoader.cc +++ b/libjava/java/lang/natClassLoader.cc @@ -48,6 +48,12 @@ _Jv_WaitForState (jclass klass, int state) _Jv_MonitorEnter (klass) ; + if (klass->state == JV_STATE_COMPILED) + { + klass->state = JV_STATE_LOADED; + if (gcj::verbose_class_flag) + fprintf (stderr, "[Loaded (pre-compiled) %s]\n", (const char*)(klass->name->data)); + } if (state == JV_STATE_LINKED) { // Must call _Jv_PrepareCompiledClass while holding the class @@ -86,7 +92,8 @@ typedef unsigned int uaddr __attribute__ ((mode (pointer))); void _Jv_PrepareCompiledClass (jclass klass) { - if (klass->state >= JV_STATE_LINKED) + jint state = klass->state; + if (state >= JV_STATE_LINKED) return; // Short-circuit, so that mutually dependent classes are ok. @@ -173,6 +180,10 @@ _Jv_PrepareCompiledClass (jclass klass) if (klass->isInterface ()) _Jv_LayoutInterfaceMethods (klass); + if (state == JV_STATE_COMPILED && gcj::verbose_class_flag) + fprintf (stderr, "[Loaded (pre-compiled) %s]\n", + (const char*)(klass->name->data)); + klass->notifyAll (); _Jv_PushClass (klass); |