You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2006/12/23 08:04:04 UTC

svn commit: r489862 - /harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp

Author: gshimansky
Date: Fri Dec 22 23:04:02 2006
New Revision: 489862

URL: http://svn.apache.org/viewvc?view=rev&rev=489862
Log:
Applied HARMONY-2851 [drlvm] ClassCircularityError cannot be thrown from class loader.

Tests passed on Ubuntu6 x86, WindowsXP and SuSE9 x86_64


Modified:
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp?view=diff&rev=489862&r1=489861&r2=489862
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp Fri Dec 22 23:04:02 2006
@@ -1487,12 +1487,20 @@
                                        const String* className)
 {
     assert(env == m_env);
+    assert(!exn_raised());
+
     Class* klass = StartLoadingClass(m_env, className);
 
     if(klass != NULL) {
         // class is already loaded so return it
         return klass;
     }
+    if(exn_raised()) {
+        // this is most probably ClassCircularityError
+        // detected in StartLoadingClass
+        return NULL;
+    }
+
     TRACE2("classloader.load", "Loader (" << this << ") loading class: " << className->bytes << "...");
 
     // Not in the class cache: load the class or, if an array class, create it
@@ -1510,12 +1518,18 @@
 {
     ASSERT_RAISE_AREA;
     assert(m_loader != NULL);
+    assert(!exn_raised());
 
     Class* klass = StartLoadingClass(env, className);
 
     if(klass != NULL) {
         return klass;
     }
+    if(exn_raised()) {
+        // this is most probably ClassCircularityError
+        // detected in StartLoadingClass
+        return NULL;
+    }
 
     TRACE2("classloader.load", "Loader U (" << this << ") loading class: " << className->bytes << "...");
 
@@ -1544,7 +1558,6 @@
     //  * (Ljava/lang/String;Z) is not abstract in current JDK version
     //  * Generally (Ljava/lang/String;) are overloaded
     assert(hythread_is_suspend_enabled());
-    assert(!exn_raised());
     tmn_suspend_disable();
 
     jvalue args[2];