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/18 18:10:45 UTC
svn commit: r488344 -
/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp
Author: gshimansky
Date: Mon Dec 18 09:10:45 2006
New Revision: 488344
URL: http://svn.apache.org/viewvc?view=rev&rev=488344
Log:
Applied HARMONY-2775 vm/vmcore/src/class_support/classloader.cpp
Tests passed on Ubuntu6 and Windows 2003 server x86
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=488344&r1=488343&r2=488344
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp Mon Dec 18 09:10:45 2006
@@ -638,6 +638,14 @@
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