Index: vm/vmcore/src/gc/root_set_enum_common.cpp =================================================================== --- vm/vmcore/src/gc/root_set_enum_common.cpp (revision 590662) +++ vm/vmcore/src/gc/root_set_enum_common.cpp (working copy) @@ -118,6 +118,7 @@ void vm_enumerate_static_fields() { TRACE2("enumeration", "vm_enumerate_static_fields()"); + assert(!hythread_is_suspend_enabled()); GlobalClassLoaderIterator ClIterator; Boolean do_class_unloading = gc_supports_class_unloading(); ClassLoader *cl = ClIterator.first(); Index: vm/vmcore/include/classloader.h =================================================================== --- vm/vmcore/include/classloader.h (revision 590662) +++ vm/vmcore/include/classloader.h (working copy) @@ -174,6 +174,7 @@ return klass?*klass:NULL; } void RemoveFromReported(const String* name){ + assert(!hythread_is_suspend_enabled()); if(m_reportedClasses->Lookup(name)) { m_reportedClasses->Remove(name); } Index: vm/vmcore/src/class_support/classloader.cpp =================================================================== --- vm/vmcore/src/class_support/classloader.cpp (revision 590662) +++ vm/vmcore/src/class_support/classloader.cpp (working copy) @@ -506,6 +506,7 @@ void ClassLoader::ClearMarkBits() { TRACE2("classloader.unloading.clear", "Clearing mark bits"); + assert(!hythread_is_suspend_enabled()); LMAutoUnlock aulock( &(ClassLoader::m_tableLock) ); ClassTable::iterator cti; for(unsigned i = 0; i < m_nextEntry; i++) { @@ -694,6 +695,7 @@ void ClassLoader::FailedLoadingClass(const String* className) { LOG2("classloader", "Failed loading class " << className << " with loader " << this); + tmn_suspend_disable(); LMAutoUnlock aulock( &m_lock ); LoadingClass* lc = m_loadingClasses->Lookup(className); @@ -702,6 +704,8 @@ RemoveLoadingClass(className, lc); } RemoveFromReported(className); + aulock.ForceUnlock(); + tmn_suspend_enable(); } @@ -1710,6 +1714,7 @@ } } + tmn_suspend_disable(); LMAutoUnlock aulock(&m_lock); m_loadedClasses->Insert(clss->get_name(), clss); if (!IsBootstrap()){ @@ -1717,6 +1722,8 @@ } m_initiatedClasses->Insert(clss->get_name(), clss); + aulock.ForceUnlock(); + tmn_suspend_enable(); return true; }