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 2007/01/26 09:24:49 UTC

svn commit: r500178 - in /harmony/enhanced/drlvm/trunk/vm/vmcore/src: class_support/classloader.cpp exception/exceptions_impl.cpp

Author: gshimansky
Date: Fri Jan 26 00:24:47 2007
New Revision: 500178

URL: http://svn.apache.org/viewvc?view=rev&rev=500178
Log:
Applied HARMONY-2022 [drlvm] Fix ClassLoading in exception raised state.

Tests passed on Ubuntu6 x86, Windows 2003 server x86 and SuSE9 x86_64


Modified:
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/exception/exceptions_impl.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=500178&r1=500177&r2=500178
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp Fri Jan 26 00:24:47 2007
@@ -218,6 +218,7 @@
                                 uint8* bytecode, unsigned offset, unsigned length,
                                 const String** res_name)
 {
+    assert(!exn_raised());
     const String *className;
 
     LOG2("classloader.defineclass", "Defining class " << (NULL != class_name ? class_name : "NULL") << " with loader " << this);
@@ -226,6 +227,7 @@
     } else {
         className = class_extract_name(env, bytecode, offset, length);
         if(className == NULL) {
+            FailedLoadingClass(className);
             exn_raise_by_name("java/lang/ClassFormatError",
                 "class name could not be extracted from provided class data", NULL);
             return NULL;
@@ -235,7 +237,7 @@
         *res_name = className;
     }
 
-    Class* clss;
+    Class* clss = NULL;
     if((clss = WaitDefinition(env, className)) != NULL || exn_raised())
         return clss;
 
@@ -336,6 +338,7 @@
 
 Class* ClassLoader::LoadVerifyAndPrepareClass(Global_Env* env, const String* name)
 {
+    assert(!exn_raised());
     assert(hythread_is_suspend_enabled());
 
     Class* clss = LoadClass(env, name);
@@ -908,6 +911,7 @@
 */
 Class* ClassLoader::AllocateAndReportInstance(const Global_Env* env, Class* clss)
 {
+     ASSERT_RAISE_AREA;
     const String* name = clss->get_name();
     assert(name);
 
@@ -1486,6 +1490,7 @@
 Class* BootstrapClassLoader::DoLoadClass(Global_Env* UNREF env,
                                        const String* className)
 {
+    assert(!exn_raised());
     assert(env == m_env);
     assert(!exn_raised());
 
@@ -1669,6 +1674,8 @@
 
 Class* BootstrapClassLoader::LoadFromFile(const String* class_name)
 {
+    assert(!exn_raised());
+
     // the symptom of circularity (illegal) is that a null class name is passed,
     // so detect this immediately
     if( !class_name->bytes || *(class_name->bytes) == 0 ) {
@@ -1788,6 +1795,8 @@
 Class* BootstrapClassLoader::LoadFromJarFile( JarFile* jar_file,
     const char* class_name_in_jar, const String* class_name, bool* not_found)
 {
+    assert(!exn_raised());
+
     // find archive entry in archive file
     *not_found = false;
     const JarEntry *entry = jar_file->Lookup(class_name_in_jar);

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/exception/exceptions_impl.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/exception/exceptions_impl.cpp?view=diff&rev=500178&r1=500177&r2=500178
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/exception/exceptions_impl.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/exception/exceptions_impl.cpp Fri Jan 26 00:24:47 2007
@@ -42,11 +42,19 @@
     String *exc_str = env->string_pool.lookup(exception_name);
     Class *exc_class =
         env->bootstrap_class_loader->LoadVerifyAndPrepareClass(env, exc_str);
-    if (exc_class == NULL) return NULL;
+
+    if (exc_class == NULL) {
+        return NULL;
+    }
+
     tmn_suspend_disable();
     class_initialize(exc_class);
     tmn_suspend_enable();
-    assert(!exn_raised());
+
+    if (exn_raised()) {
+        return NULL;
+    }
+
     return exc_class;
 }