[domain] Use handles for MonoAppContext icalls
authorAleksey Kliger <aleksey@xamarin.com>
Tue, 21 Mar 2017 17:37:01 +0000 (13:37 -0400)
committerAleksey Kliger <aleksey@xamarin.com>
Fri, 14 Apr 2017 14:59:25 +0000 (10:59 -0400)
* ves_icall_System_AppDomain_InternalGetContext
* ves_icall_System_AppDomain_InternalGetDefaultContext
* ves_icall_System_AppDomain_InternalSetContext

mono/metadata/appdomain-icalls.h
mono/metadata/appdomain.c
mono/metadata/domain.c
mono/metadata/handle.h
mono/metadata/icall-def.h

index 03fed5f64ef36c0886041cbcd73deec4daeb4429..0554aaaf622ccd3ada1c13b27ce00bebb849c999 100644 (file)
@@ -98,14 +98,14 @@ ves_icall_System_AppDomain_InternalPushDomainRefByID (gint32 domain_id, MonoErro
 void
 ves_icall_System_AppDomain_InternalPopDomainRef (MonoError *error);
 
-MonoAppContext * 
-ves_icall_System_AppDomain_InternalGetContext      (void);
+MonoAppContextHandle
+ves_icall_System_AppDomain_InternalGetContext      (MonoError *error);
 
-MonoAppContext * 
-ves_icall_System_AppDomain_InternalGetDefaultContext      (void);
+MonoAppContextHandle
+ves_icall_System_AppDomain_InternalGetDefaultContext      (MonoError *error);
 
-MonoAppContext * 
-ves_icall_System_AppDomain_InternalSetContext     (MonoAppContext *mc);
+MonoAppContextHandle
+ves_icall_System_AppDomain_InternalSetContext     (MonoAppContextHandle mc, MonoError *error);
 
 gint32 
 ves_icall_System_AppDomain_GetIDFromDomain (MonoAppDomain * ad);
index 790dc504ed56b80fb71f8b2249a5eb0070eb2531..4894a6e626d7697be54798b4500921c9ae08a2a2 100644 (file)
@@ -2334,24 +2334,27 @@ ves_icall_System_AppDomain_InternalPopDomainRef (MonoError *error)
        mono_thread_pop_appdomain_ref ();
 }
 
-MonoAppContext * 
-ves_icall_System_AppDomain_InternalGetContext ()
+MonoAppContextHandle
+ves_icall_System_AppDomain_InternalGetContext (MonoError *error)
 {
-       return mono_context_get ();
+       error_init (error);
+       return mono_context_get_handle ();
 }
 
-MonoAppContext * 
-ves_icall_System_AppDomain_InternalGetDefaultContext ()
+MonoAppContextHandle
+ves_icall_System_AppDomain_InternalGetDefaultContext (MonoError *error)
 {
-       return mono_domain_get ()->default_context;
+       error_init (error);
+       return MONO_HANDLE_NEW (MonoAppContext, mono_domain_get ()->default_context);
 }
 
-MonoAppContext * 
-ves_icall_System_AppDomain_InternalSetContext (MonoAppContext *mc)
+MonoAppContextHandle
+ves_icall_System_AppDomain_InternalSetContext (MonoAppContextHandle mc, MonoError *error)
 {
-       MonoAppContext *old_context = mono_context_get ();
+       error_init (error);
+       MonoAppContextHandle old_context = mono_context_get_handle ();
 
-       mono_context_set (mc);
+       mono_context_set_handle (mc);
 
        return old_context;
 }
index 03e4540f55c048d7a45d222af4cf91fa038455a7..fb2f414570f1c2ef90362d120f9fd6603f84bd89 100644 (file)
@@ -1399,6 +1399,12 @@ mono_context_set (MonoAppContext * new_context)
        SET_APPCONTEXT (new_context);
 }
 
+void
+mono_context_set_handle (MonoAppContextHandle new_context)
+{
+       SET_APPCONTEXT (MONO_HANDLE_RAW (new_context));
+}
+
 /**
  * mono_context_get:
  *
@@ -1410,6 +1416,17 @@ mono_context_get (void)
        return GET_APPCONTEXT ();
 }
 
+/**
+ * mono_context_get_handle:
+ *
+ * Returns: the current Mono Application Context.
+ */
+MonoAppContextHandle
+mono_context_get_handle (void)
+{
+       return MONO_HANDLE_NEW (MonoAppContext, GET_APPCONTEXT ());
+}
+
 /**
  * mono_context_get_id:
  * \param context the context to operate on.
index 2b35c878e3680fb9a92d45f47f8ae216982e6bc2..103b6839a7449a7e13876308e24cb067fcc3fd96 100644 (file)
@@ -397,6 +397,7 @@ TYPED_HANDLE_DECL (MonoString);
 TYPED_HANDLE_DECL (MonoArray);
 TYPED_HANDLE_DECL (MonoObject);
 TYPED_HANDLE_DECL (MonoException);
+TYPED_HANDLE_DECL (MonoAppContext);
 
 #define NULL_HANDLE_STRING MONO_HANDLE_CAST(MonoString, NULL_HANDLE)
 
@@ -452,6 +453,13 @@ mono_array_handle_pin_with_size (MonoArrayHandle handle, int size, uintptr_t ind
 void
 mono_error_set_exception_handle (MonoError *error, MonoExceptionHandle exc);
 
+MonoAppContextHandle
+mono_context_get_handle (void);
+
+void
+mono_context_set_handle (MonoAppContextHandle new_context);
+
+
 G_END_DECLS
 
 #endif /* __MONO_HANDLE_H__ */
index a8367ddda0b693e6c0559b0808513aa6a9e94b06..85d6e53d70d0f70f67cb4a38692f595a3b5dfb42 100644 (file)
@@ -119,14 +119,14 @@ ICALL(APPDOM_23, "DoUnhandledException", ves_icall_System_AppDomain_DoUnhandledE
 HANDLES(ICALL(APPDOM_1, "ExecuteAssembly", ves_icall_System_AppDomain_ExecuteAssembly))
 HANDLES(ICALL(APPDOM_2, "GetAssemblies", ves_icall_System_AppDomain_GetAssemblies))
 HANDLES(ICALL(APPDOM_3, "GetData", ves_icall_System_AppDomain_GetData))
-ICALL(APPDOM_4, "InternalGetContext", ves_icall_System_AppDomain_InternalGetContext)
-ICALL(APPDOM_5, "InternalGetDefaultContext", ves_icall_System_AppDomain_InternalGetDefaultContext)
+HANDLES(ICALL(APPDOM_4, "InternalGetContext", ves_icall_System_AppDomain_InternalGetContext))
+HANDLES(ICALL(APPDOM_5, "InternalGetDefaultContext", ves_icall_System_AppDomain_InternalGetDefaultContext))
 HANDLES(ICALL(APPDOM_6, "InternalGetProcessGuid", ves_icall_System_AppDomain_InternalGetProcessGuid))
 HANDLES(ICALL(APPDOM_7, "InternalIsFinalizingForUnload", ves_icall_System_AppDomain_InternalIsFinalizingForUnload))
 HANDLES(ICALL(APPDOM_8, "InternalPopDomainRef", ves_icall_System_AppDomain_InternalPopDomainRef))
 HANDLES(ICALL(APPDOM_9, "InternalPushDomainRef", ves_icall_System_AppDomain_InternalPushDomainRef))
 HANDLES(ICALL(APPDOM_10, "InternalPushDomainRefByID", ves_icall_System_AppDomain_InternalPushDomainRefByID))
-ICALL(APPDOM_11, "InternalSetContext", ves_icall_System_AppDomain_InternalSetContext)
+HANDLES(ICALL(APPDOM_11, "InternalSetContext", ves_icall_System_AppDomain_InternalSetContext))
 HANDLES(ICALL(APPDOM_12, "InternalSetDomain", ves_icall_System_AppDomain_InternalSetDomain))
 HANDLES(ICALL(APPDOM_13, "InternalSetDomainByID", ves_icall_System_AppDomain_InternalSetDomainByID))
 HANDLES(ICALL(APPDOM_14, "InternalUnload", ves_icall_System_AppDomain_InternalUnload))