diff --git a/enhanced/drlvm/trunk/vm/vmcore/include/version_svn_tag.h b/enhanced/drlvm/trunk/vm/vmcore/include/version_svn_tag.h index b131598..d0bad95 100755 --- a/enhanced/drlvm/trunk/vm/vmcore/include/version_svn_tag.h +++ b/enhanced/drlvm/trunk/vm/vmcore/include/version_svn_tag.h @@ -18,6 +18,6 @@ #ifndef _VERSION_SVN_TAG_ #define _VERSION_SVN_TAG_ -#define VERSION_SVN_TAG "482136" +#define VERSION_SVN_TAG "488230" #endif // _VERSION_SVN_TAG_ diff --git a/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp b/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp index 1174a13..c11a950 100644 --- a/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp +++ b/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp @@ -638,6 +638,14 @@ Class* ClassLoader::StartLoadingClass(Gl TRACE2("classloader.collisions", this << " Collision while loading class " << className->bytes); if(m_loader == NULL) { + if(loading->AlreadyWaiting(cur_thread)) { + // we spinned one time already; + // loading in some other thread failed + // so, lets try to load once again in this thread + loading->SetInitiator(cur_thread); + loading->RemoveWaitingThread(cur_thread, this, className); + return NULL; + } // avoid preliminary removal of LoadingClass loading->AddWaitingThread(cur_thread, this, className); // lazy wait event creation