summaryrefslogtreecommitdiff
path: root/src/vm
diff options
context:
space:
mode:
authorSean Gillespie <segilles@microsoft.com>2017-12-12 19:04:07 -0800
committerSean Gillespie <segilles@microsoft.com>2017-12-12 19:04:07 -0800
commit8df01f50ca980ab8840124c74037782f75702032 (patch)
tree67632498038f401758197663622b1f32a4603eeb /src/vm
parent3a295a078701f72edc18a4404cab7b7e1bc104c7 (diff)
downloadcoreclr-8df01f50ca980ab8840124c74037782f75702032.tar.gz
coreclr-8df01f50ca980ab8840124c74037782f75702032.tar.bz2
coreclr-8df01f50ca980ab8840124c74037782f75702032.zip
Revert "[Local GC] Move knowledge of overlapped I/O objects to the EE through four callbacks (#14982)"
This reverts commit c755e3b7f5d597c8d192675dbaaa337268d93f1c.
Diffstat (limited to 'src/vm')
-rw-r--r--src/vm/appdomain.cpp38
-rw-r--r--src/vm/gcenv.ee.cpp81
-rw-r--r--src/vm/gcenv.ee.h2
-rw-r--r--src/vm/gcenv.ee.standalone.cpp3
-rw-r--r--src/vm/gcenv.ee.static.cpp3
5 files changed, 5 insertions, 122 deletions
diff --git a/src/vm/appdomain.cpp b/src/vm/appdomain.cpp
index 07e3280342..370847c9a2 100644
--- a/src/vm/appdomain.cpp
+++ b/src/vm/appdomain.cpp
@@ -9053,43 +9053,7 @@ void AppDomain::HandleAsyncPinHandles()
// 4. Then we can delete all AsyncPinHandle marked with READYTOCLEAN.
IGCHandleStore *pBucketInDefault = SystemDomain::System()->DefaultDomain()->m_handleStore;
- auto clearIfComplete = [](Object* object)
- {
- LIMITED_METHOD_CONTRACT;
-
- assert(object != nullptr);
- if (object->GetGCSafeMethodTable() != g_pOverlappedDataClass)
- {
- return;
- }
-
- OVERLAPPEDDATAREF overlapped = (OVERLAPPEDDATAREF)(ObjectToOBJECTREF((Object*)object));
- if (overlapped->HasCompleted())
- {
- // IO has finished. We don't need to pin the user buffer any longer.
- overlapped->m_userObject = NULL;
- }
-
- BashMTForPinnedObject(ObjectToOBJECTREF(object));
- };
-
- auto setHandle = [](Object* object, OBJECTHANDLE handle)
- {
- LIMITED_METHOD_CONTRACT;
-
- assert(object != nullptr);
- assert(handle);
-
- if (object->GetGCSafeMethodTable() != g_pOverlappedDataClass)
- {
- return;
- }
-
- OverlappedDataObject* overlapped = (OverlappedDataObject*)object;
- overlapped->m_pinSelf = handle;
- };
-
- pBucket->RelocateAsyncPinnedHandles(pBucketInDefault, clearIfComplete, setHandle);
+ pBucket->RelocateAsyncPinnedHandles(pBucketInDefault);
OverlappedDataObject::RequestCleanup();
}
diff --git a/src/vm/gcenv.ee.cpp b/src/vm/gcenv.ee.cpp
index a880fdbca6..e5da889a64 100644
--- a/src/vm/gcenv.ee.cpp
+++ b/src/vm/gcenv.ee.cpp
@@ -1201,7 +1201,7 @@ namespace
};
InlineSString<MaxThreadNameSize> wideName;
- const WCHAR* namePtr = nullptr;
+ const WCHAR* namePtr;
EX_TRY
{
if (name != nullptr)
@@ -1214,6 +1214,7 @@ namespace
{
// we're not obligated to provide a name - if it's not valid,
// just report nullptr as the name.
+ namePtr = nullptr;
}
EX_END_CATCH(SwallowAllExceptions)
@@ -1306,81 +1307,3 @@ bool GCToEEInterface::CreateThread(void (*threadStart)(void*), void* arg, bool i
return CreateNonSuspendableThread(threadStart, arg, name);
}
}
-
-void GCToEEInterface::WalkAsyncPinnedForPromotion(Object* object, ScanContext* sc, promote_func* callback)
-{
- LIMITED_METHOD_CONTRACT;
-
- assert(object != nullptr);
- assert(sc != nullptr);
- assert(callback != nullptr);
- if (object->GetGCSafeMethodTable() != g_pOverlappedDataClass)
- {
- // not an overlapped data object - nothing to do.
- return;
- }
-
- // reporting the pinned user objects
- OverlappedDataObject *pOverlapped = (OverlappedDataObject *)object;
- if (pOverlapped->m_userObject != NULL)
- {
- //callback(OBJECTREF_TO_UNCHECKED_OBJECTREF(pOverlapped->m_userObject), (ScanContext *)lp1, GC_CALL_PINNED);
- if (pOverlapped->m_isArray)
- {
- // OverlappedDataObject is very special. An async pin handle keeps it alive.
- // During GC, we also make sure
- // 1. m_userObject itself does not move if m_userObject is not array
- // 2. Every object pointed by m_userObject does not move if m_userObject is array
- // We do not want to pin m_userObject if it is array. But m_userObject may be updated
- // during relocation phase before OverlappedDataObject is doing relocation.
- // m_userObjectInternal is used to track the location of the m_userObject before it is updated.
- pOverlapped->m_userObjectInternal = static_cast<void*>(OBJECTREFToObject(pOverlapped->m_userObject));
- ArrayBase* pUserObject = (ArrayBase*)OBJECTREFToObject(pOverlapped->m_userObject);
- Object **ppObj = (Object**)pUserObject->GetDataPtr(TRUE);
- size_t num = pUserObject->GetNumComponents();
- for (size_t i = 0; i < num; i++)
- {
- callback(ppObj + i, sc, GC_CALL_PINNED);
- }
- }
- else
- {
- callback(&OBJECTREF_TO_UNCHECKED_OBJECTREF(pOverlapped->m_userObject), (ScanContext *)sc, GC_CALL_PINNED);
- }
- }
-
- if (pOverlapped->GetAppDomainId() != DefaultADID && pOverlapped->GetAppDomainIndex().m_dwIndex == DefaultADID)
- {
- OverlappedDataObject::MarkCleanupNeededFromGC();
- }
-}
-
-void GCToEEInterface::WalkAsyncPinned(Object* object, void* context, void (*callback)(Object*, Object*, void*))
-{
- LIMITED_METHOD_CONTRACT;
-
- assert(object != nullptr);
- assert(callback != nullptr);
-
- if (object->GetGCSafeMethodTable() != g_pOverlappedDataClass)
- {
- return;
- }
-
- OverlappedDataObject *pOverlapped = (OverlappedDataObject *)(object);
- if (pOverlapped->m_userObject != NULL)
- {
- Object * pUserObject = OBJECTREFToObject(pOverlapped->m_userObject);
- callback(object, pUserObject, context);
- if (pOverlapped->m_isArray)
- {
- ArrayBase* pUserArrayObject = (ArrayBase*)pUserObject;
- Object **pObj = (Object**)pUserArrayObject->GetDataPtr(TRUE);
- size_t num = pUserArrayObject->GetNumComponents();
- for (size_t i = 0; i < num; i ++)
- {
- callback(pUserObject, pObj[i], context);
- }
- }
- }
-}
diff --git a/src/vm/gcenv.ee.h b/src/vm/gcenv.ee.h
index e3867b7e98..b2ada36bcd 100644
--- a/src/vm/gcenv.ee.h
+++ b/src/vm/gcenv.ee.h
@@ -60,8 +60,6 @@ public:
bool IsGCThread();
bool WasCurrentThreadCreatedByGC();
bool CreateThread(void (*threadStart)(void*), void* arg, bool is_suspendable, const char* name);
- void WalkAsyncPinnedForPromotion(Object* object, ScanContext* sc, promote_func* callback);
- void WalkAsyncPinned(Object* object, void* context, void(*callback)(Object*, Object*, void*));
};
} // namespace standalone
diff --git a/src/vm/gcenv.ee.standalone.cpp b/src/vm/gcenv.ee.standalone.cpp
index be8ceca0c1..5ba2aca812 100644
--- a/src/vm/gcenv.ee.standalone.cpp
+++ b/src/vm/gcenv.ee.standalone.cpp
@@ -6,7 +6,6 @@
#include "gcenv.h"
#include "gcenv.ee.h"
#include "threadsuspend.h"
-#include "nativeoverlapped.h"
#ifdef FEATURE_COMINTEROP
#include "runtimecallablewrapper.h"
@@ -28,4 +27,4 @@ namespace standalone
#include "gcenv.ee.cpp"
-} // namespace standalone
+} // namespace standalone \ No newline at end of file
diff --git a/src/vm/gcenv.ee.static.cpp b/src/vm/gcenv.ee.static.cpp
index 975decadf4..240e325a9e 100644
--- a/src/vm/gcenv.ee.static.cpp
+++ b/src/vm/gcenv.ee.static.cpp
@@ -6,7 +6,6 @@
#include "gcenv.h"
#include "../gc/env/gcenv.ee.h"
#include "threadsuspend.h"
-#include "nativeoverlapped.h"
#ifdef FEATURE_COMINTEROP
#include "runtimecallablewrapper.h"
@@ -23,4 +22,4 @@ extern MethodTable* pWeakReferenceOfTCanonMT;
// Finalizes a weak reference directly.
extern void FinalizeWeakReference(Object* obj);
-#include "gcenv.ee.cpp"
+#include "gcenv.ee.cpp" \ No newline at end of file