aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/lang/natClassLoader.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/lang/natClassLoader.cc')
-rw-r--r--libjava/java/lang/natClassLoader.cc13
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);