diff options
Diffstat (limited to 'src/vm/comdependenthandle.cpp')
-rw-r--r-- | src/vm/comdependenthandle.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/vm/comdependenthandle.cpp b/src/vm/comdependenthandle.cpp index 6535a804ae..4763e4833a 100644 --- a/src/vm/comdependenthandle.cpp +++ b/src/vm/comdependenthandle.cpp @@ -17,22 +17,22 @@ -FCIMPL3(VOID, DependentHandle::nInitialize, Object *_primary, Object *_secondary, OBJECTHANDLE *outHandle) +FCIMPL2(OBJECTHANDLE, DependentHandle::nInitialize, Object *_primary, Object *_secondary) { FCALL_CONTRACT; - _ASSERTE(outHandle != NULL && *outHandle == NULL); // Multiple initializations disallowed - OBJECTREF primary(_primary); OBJECTREF secondary(_secondary); + OBJECTHANDLE result = NULL; - HELPER_METHOD_FRAME_BEGIN_NOPOLL(); + HELPER_METHOD_FRAME_BEGIN_RET_NOPOLL(); // Create the handle. - *outHandle = GetAppDomain()->CreateDependentHandle(primary, secondary); + result = GetAppDomain()->CreateDependentHandle(primary, secondary); HELPER_METHOD_FRAME_END_POLL(); + return result; } FCIMPLEND @@ -55,22 +55,28 @@ FCIMPLEND -FCIMPL2(VOID, DependentHandle::nGetPrimary, OBJECTHANDLE handle, Object **outPrimary) +FCIMPL1(Object*, DependentHandle::nGetPrimary, OBJECTHANDLE handle) { FCALL_CONTRACT; - _ASSERTE(handle != NULL && outPrimary != NULL); - *outPrimary = OBJECTREFToObject(ObjectFromHandle(handle)); + FCUnique(0x54); + _ASSERTE(handle != NULL); + return OBJECTREFToObject(ObjectFromHandle(handle)); } FCIMPLEND -FCIMPL3(VOID, DependentHandle::nGetPrimaryAndSecondary, OBJECTHANDLE handle, Object **outPrimary, Object **outSecondary) +FCIMPL2(Object*, DependentHandle::nGetPrimaryAndSecondary, OBJECTHANDLE handle, Object **outSecondary) { FCALL_CONTRACT; - _ASSERTE(handle != NULL && outPrimary != NULL && outSecondary != NULL); - *outPrimary = OBJECTREFToObject(ObjectFromHandle(handle)); - *outSecondary = OBJECTREFToObject(GetDependentHandleSecondary(handle)); + _ASSERTE(handle != NULL && outSecondary != NULL); + + OBJECTREF primary = ObjectFromHandle(handle); + + // Secondary is tracked only if primary is non-null + *outSecondary = (primary != NULL) ? OBJECTREFToObject(GetDependentHandleSecondary(handle)) : NULL; + + return OBJECTREFToObject(primary); } FCIMPLEND |