diff options
author | Jeremy Koritzinsky <jkoritzinsky@gmail.com> | 2018-11-10 16:07:33 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-10 16:07:33 -0800 |
commit | 463ba889b0c010eb9c6f9807eaf0ab4ab5624450 (patch) | |
tree | dbddeb8d3539468ce4af86c9a408f91c41764e67 /src/vm/metasig.h | |
parent | 845fc293bef24024f779e05ebc33971bea2728d3 (diff) | |
download | coreclr-463ba889b0c010eb9c6f9807eaf0ab4ab5624450.tar.gz coreclr-463ba889b0c010eb9c6f9807eaf0ab4ab5624450.tar.bz2 coreclr-463ba889b0c010eb9c6f9807eaf0ab4ab5624450.zip |
Keep delegate fields alive across a full native call (#20896)
* Repurpose CleanupWorkList to also preserve delegate references in structs across the full native call.
* Change CleanupWorkListElement to abstract base class instead of interface.
* Make CleanupWorkList a singlely linked list.
* PR Feedback.
* Remove CleanupWorkList and make CleanupWorkListElement be able to represent the full list.
* Add back throw in SafeHandle field marshalling.
* PR feedback.
Diffstat (limited to 'src/vm/metasig.h')
-rw-r--r-- | src/vm/metasig.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/vm/metasig.h b/src/vm/metasig.h index e826526976..b258f441ce 100644 --- a/src/vm/metasig.h +++ b/src/vm/metasig.h @@ -212,7 +212,7 @@ DEFINE_METASIG(SM(RetBool, _, F)) DEFINE_METASIG(SM(IntPtr_RetStr, I, s)) DEFINE_METASIG(SM(IntPtr_RetBool, I, F)) DEFINE_METASIG(SM(IntPtrIntPtrIntPtr_RetVoid, I I I, v)) -DEFINE_METASIG_T(SM(IntPtrIntPtrIntPtr_RefCleanupWorkList_RetVoid, I I I r(C(CLEANUP_WORK_LIST)), v)) +DEFINE_METASIG_T(SM(IntPtrIntPtrIntPtr_RefCleanupWorkListElement_RetVoid, I I I r(C(CLEANUP_WORK_LIST_ELEMENT)), v)) DEFINE_METASIG_T(SM(RuntimeType_RuntimeMethodHandleInternal_RetMethodBase, C(CLASS) g(METHOD_HANDLE_INTERNAL), C(METHOD_BASE) )) DEFINE_METASIG_T(SM(RuntimeType_IRuntimeFieldInfo_RetFieldInfo, C(CLASS) C(I_RT_FIELD_INFO), C(FIELD_INFO) )) DEFINE_METASIG_T(SM(RuntimeType_Int_RetPropertyInfo, C(CLASS) i, C(PROPERTY_INFO) )) @@ -220,7 +220,7 @@ DEFINE_METASIG(SM(Char_Bool_Bool_RetByte, u F F, b)) DEFINE_METASIG(SM(Byte_RetChar, b, u)) DEFINE_METASIG(SM(Str_Bool_Bool_RefInt_RetIntPtr, s F F r(i), I)) DEFINE_METASIG(SM(IntPtr_Int_RetStr, I i, s)) -DEFINE_METASIG_T(SM(Obj_PtrByte_RefCleanupWorkList_RetVoid, j P(b) r(C(CLEANUP_WORK_LIST)), v)) +DEFINE_METASIG_T(SM(Obj_PtrByte_RefCleanupWorkListElement_RetVoid, j P(b) r(C(CLEANUP_WORK_LIST_ELEMENT)), v)) DEFINE_METASIG(SM(Obj_PtrByte_RetVoid, j P(b), v)) DEFINE_METASIG(SM(PtrByte_IntPtr_RetVoid, P(b) I, v)) DEFINE_METASIG(SM(Str_Bool_Bool_RefInt_RetArrByte, s F F r(i), a(b) )) @@ -581,8 +581,9 @@ DEFINE_METASIG_T(SM(RefDec_RetVoid, r(g(DECIMAL)), v)) DEFINE_METASIG(GM(RefT_T_T_RetT, IMAGE_CEE_CS_CALLCONV_DEFAULT, 1, r(M(0)) M(0) M(0), M(0))) DEFINE_METASIG(SM(RefObject_Object_Object_RetObject, r(j) j j, j)) -DEFINE_METASIG_T(SM(RefCleanupWorkList_RetVoid, r(C(CLEANUP_WORK_LIST)), v)) -DEFINE_METASIG_T(SM(RefCleanupWorkList_SafeHandle_RetIntPtr, r(C(CLEANUP_WORK_LIST)) C(SAFE_HANDLE), I)) +DEFINE_METASIG_T(SM(RefCleanupWorkListElement_RetVoid, r(C(CLEANUP_WORK_LIST_ELEMENT)), v)) +DEFINE_METASIG_T(SM(RefCleanupWorkListElement_SafeHandle_RetIntPtr, r(C(CLEANUP_WORK_LIST_ELEMENT)) C(SAFE_HANDLE), I)) +DEFINE_METASIG_T(SM(RefCleanupWorkListElement_Delegate_RetVoid, r(C(CLEANUP_WORK_LIST_ELEMENT)) C(DELEGATE), v)) #ifdef FEATURE_ICASTABLE DEFINE_METASIG_T(SM(ICastable_RtType_RefException_RetBool, C(ICASTABLE) C(CLASS) r(C(EXCEPTION)), F)) |