diff options
Diffstat (limited to 'src/vm/comwaithandle.cpp')
-rw-r--r-- | src/vm/comwaithandle.cpp | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/src/vm/comwaithandle.cpp b/src/vm/comwaithandle.cpp index 13886c3de8..7b15ae5acd 100644 --- a/src/vm/comwaithandle.cpp +++ b/src/vm/comwaithandle.cpp @@ -181,11 +181,6 @@ FCIMPL4(INT32, WaitHandleNative::CorWaitOneNative, SafeHandle* safeWaitHandleUNS Context* defaultContext; defaultContext = pThread->GetDomain()->GetDefaultContext(); _ASSERTE(defaultContext); -#ifndef FEATURE_CORECLR - // DoAppropriateWait calls LeaveRuntime/EnterRuntime which may cause the current - // fiber to be re-scheduled. - ThreadAffinityAndCriticalRegionHolder affinityAndCriticalRegionHolder(hasThreadAffinity); -#endif SafeHandleHolder shh(&sh); // Note that SafeHandle is a GC object, and RequestCallback and // DoAppropriateWait work on an array of handles. Don't pass the address @@ -222,18 +217,6 @@ FCIMPL4(INT32, WaitHandleNative::CorWaitOneNative, SafeHandle* safeWaitHandleUNS retVal = res; -#ifndef FEATURE_CORECLR - if (res == WAIT_OBJECT_0 && hasThreadAffinity) { - affinityAndCriticalRegionHolder.SuppressRelease(); - } - else if(res == WAIT_ABANDONED_0) { - // WAIT_ABANDONED means the specified object is a mutex object that was not released by the thread - // that owned the mutex object before the owning thread terminated. - // Ownership of the mutex object is granted to the calling thread, and the mutex is set to nonsignaled. - _ASSERTE(hasThreadAffinity); - affinityAndCriticalRegionHolder.SuppressRelease(); - } -#endif HELPER_METHOD_FRAME_END(); return retVal; @@ -263,22 +246,12 @@ FCIMPL4(INT32, WaitHandleNative::CorWaitMultipleNative, Object* waitObjectsUNSAF // on CoreCLR we won't break anyone. // Perhaps in a future release we can fix this, if we aren't quite so concerned about // compatibility.... -#if defined(FEATURE_COMINTEROP) && !defined(FEATURE_CORECLR) - if (waitForAll && numWaiters > 1 && pThread->GetApartment() == Thread::AS_InSTA) { - COMPlusThrow(kNotSupportedException, W("NotSupported_WaitAllSTAThread")); - } -#endif // FEATURE_COMINTEROP && !FEATURE_CORECLR WaitHandleArrayHolder arrayHolder; arrayHolder.Initialize(numWaiters, (PTRARRAYREF*) &waitObjects); pWaitObjects = (PTRARRAYREF)waitObjects; // array of objects on which to wait HANDLE* internalHandles = (HANDLE*) _alloca(numWaiters*sizeof(HANDLE)); -#ifndef FEATURE_CORECLR - BOOL *hasThreadAffinity = (BOOL*) _alloca(numWaiters*sizeof(BOOL)); - - BOOL mayRequireThreadAffinity = FALSE; -#endif // !FEATURE_CORECLR for (int i=0;i<numWaiters;i++) { WAITHANDLEREF waitObject = (WAITHANDLEREF) pWaitObjects->m_Array[i]; @@ -289,19 +262,9 @@ FCIMPL4(INT32, WaitHandleNative::CorWaitMultipleNative, Object* waitObjectsUNSAF // this behavior seems wrong but someone explicitly coded that condition so it must have been for a reason. internalHandles[i] = waitObject->m_handle; -#ifndef FEATURE_CORECLR - // m_hasThreadAffinity is set for Mutex only - hasThreadAffinity[i] = waitObject->m_hasThreadAffinity; - if (hasThreadAffinity[i]) { - mayRequireThreadAffinity = TRUE; - } -#endif // !FEATURE_CORECLR } DWORD res = (DWORD) -1; -#ifndef FEATURE_CORECLR - ThreadAffinityHolder affinityHolder(mayRequireThreadAffinity); -#endif // !FEATURE_CORECLR Context* targetContext; targetContext = pThread->GetContext(); _ASSERTE(targetContext); @@ -335,45 +298,6 @@ FCIMPL4(INT32, WaitHandleNative::CorWaitMultipleNative, Object* waitObjectsUNSAF } } -#ifndef FEATURE_CORECLR - if (mayRequireThreadAffinity) { - if (waitForAll) { - if (res >= (DWORD) WAIT_OBJECT_0 && res < (DWORD) WAIT_OBJECT_0 + numWaiters) { - for (int i = 0; i < numWaiters; i ++) { - if (hasThreadAffinity[i]) { - Thread::BeginThreadAffinityAndCriticalRegion(); - } - } - } - // If some mutex is abandoned - else if (res >= (DWORD) WAIT_ABANDONED_0 && res < (DWORD) WAIT_ABANDONED_0+numWaiters) { - for (int i = 0; i < numWaiters; i ++) { - if (hasThreadAffinity[i]) - { - if (WaitForSingleObject(internalHandles[i],0) == WAIT_OBJECT_0) - { - BOOL result; - result = ReleaseMutex(internalHandles[i]); - _ASSERTE (result); - Thread::BeginThreadAffinityAndCriticalRegion(); - } - } - } - } - } - else { - if ( res >= (DWORD)WAIT_OBJECT_0 && res < (DWORD)WAIT_OBJECT_0 + numWaiters) { - if (hasThreadAffinity[res - WAIT_OBJECT_0]) { - Thread::BeginThreadAffinityAndCriticalRegion(); - } - } - else if (res >= (DWORD)WAIT_ABANDONED_0 && res < (DWORD)WAIT_ABANDONED_0 + numWaiters) { - _ASSERTE (hasThreadAffinity[res - WAIT_ABANDONED_0]); - Thread::BeginThreadAffinityAndCriticalRegion(); - } - } - } -#endif // !FEATURE_CORECLR retVal = res; @@ -415,11 +339,6 @@ FCIMPL5(INT32, WaitHandleNative::CorSignalAndWaitOneNative, SafeHandle* safeWait Context* defaultContext = pThread->GetDomain()->GetDefaultContext(); _ASSERTE(defaultContext); -#ifndef FEATURE_CORECLR - // DoSignalAndWait calls LeaveRuntime/EnterRuntime which may cause the current - // fiber to be re-scheduled. - ThreadAffinityAndCriticalRegionHolder affinityAndCriticalRegionHolder(hasThreadAffinity); -#endif // !FEATURE_CORECLR SafeHandleHolder shhSignal(&shSignal); SafeHandleHolder shhWait(&shWait); @@ -444,15 +363,6 @@ FCIMPL5(INT32, WaitHandleNative::CorSignalAndWaitOneNative, SafeHandle* safeWait res = pThread->DoSignalAndWait(handles,timeout,TRUE /*alertable*/); } -#ifndef FEATURE_CORECLR - if (res == WAIT_OBJECT_0 && hasThreadAffinity) { - affinityAndCriticalRegionHolder.SuppressRelease(); - } - else if(res == WAIT_ABANDONED_0) { - _ASSERTE(hasThreadAffinity); - affinityAndCriticalRegionHolder.SuppressRelease(); - } -#endif // !FEATURE_CORECLR retVal = res; |