From b834b10a3bda4c61f24cd5c58aac3e24548867f7 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 3 May 2017 11:17:35 -0400 Subject: [PATCH] [runtime] Use coop handles for System.Environment.internalBroadcastSettingChange --- mono/metadata/icall-def.h | 2 +- mono/metadata/icall-internals.h | 4 ++-- mono/metadata/icall-windows-uwp.c | 12 +++++------- mono/metadata/icall-windows.c | 6 ++++-- mono/metadata/icall.c | 12 +++++++----- 5 files changed, 19 insertions(+), 17 deletions(-) diff --git a/mono/metadata/icall-def.h b/mono/metadata/icall-def.h index 242fb35d7f5..19a6ef5590c 100644 --- a/mono/metadata/icall-def.h +++ b/mono/metadata/icall-def.h @@ -281,7 +281,7 @@ ICALL(ENV_14, "get_ProcessorCount", mono_cpu_count) ICALL(ENV_15, "get_TickCount", ves_icall_System_Environment_get_TickCount) HANDLES(ICALL(ENV_16, "get_UserName", ves_icall_System_Environment_get_UserName)) HANDLES(ICALL(ENV_16b, "get_bundled_machine_config", ves_icall_System_Environment_get_bundled_machine_config)) -ICALL(ENV_16m, "internalBroadcastSettingChange", ves_icall_System_Environment_BroadcastSettingChange) +HANDLES(ICALL(ENV_16m, "internalBroadcastSettingChange", ves_icall_System_Environment_BroadcastSettingChange)) HANDLES(ICALL(ENV_17, "internalGetEnvironmentVariable_native", ves_icall_System_Environment_GetEnvironmentVariable_native)) HANDLES(ICALL(ENV_18, "internalGetGacPath", ves_icall_System_Environment_GetGacPath)) HANDLES(ICALL(ENV_19, "internalGetHome", ves_icall_System_Environment_InternalGetHome)) diff --git a/mono/metadata/icall-internals.h b/mono/metadata/icall-internals.h index 60cca8316b0..c172b8404bc 100644 --- a/mono/metadata/icall-internals.h +++ b/mono/metadata/icall-internals.h @@ -44,8 +44,8 @@ mono_icall_set_environment_variable (MonoString *name, MonoString *value); MonoStringHandle mono_icall_get_windows_folder_path (int folder, MonoError *error); -void -mono_icall_broadcast_setting_change (void); +MonoBoolean +mono_icall_broadcast_setting_change (MonoError *error); void mono_icall_write_windows_debug_string (MonoString *message); diff --git a/mono/metadata/icall-windows-uwp.c b/mono/metadata/icall-windows-uwp.c index 2708e90e26e..918510b1c7b 100644 --- a/mono/metadata/icall-windows-uwp.c +++ b/mono/metadata/icall-windows-uwp.c @@ -44,20 +44,18 @@ mono_icall_get_logical_drives (void) return NULL; } -void -mono_icall_broadcast_setting_change (void) +MonoBoolean +mono_icall_broadcast_setting_change (MonoError *error) { - MonoError mono_error; - error_init (&mono_error); + error_init (error); g_unsupported_api ("SendMessageTimeout"); - mono_error_set_not_supported (&mono_error, G_UNSUPPORTED_API, "SendMessageTimeout"); - mono_error_set_pending_exception (&mono_error); + mono_error_set_not_supported (error, G_UNSUPPORTED_API, "SendMessageTimeout"); SetLastError (ERROR_NOT_SUPPORTED); - return; + return is_ok (error); } guint32 diff --git a/mono/metadata/icall-windows.c b/mono/metadata/icall-windows.c index 21a759157c0..691d1b03b30 100644 --- a/mono/metadata/icall-windows.c +++ b/mono/metadata/icall-windows.c @@ -197,10 +197,12 @@ mono_icall_get_windows_folder_path (int folder, MonoError *error) #endif /* G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) */ #if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) -void -mono_icall_broadcast_setting_change (void) +MonoBoolean +mono_icall_broadcast_setting_change (MonoError *error) { + error_init (error); SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, (WPARAM)NULL, (LPARAM)L"Environment", SMTO_ABORTIFHUNG, 2000, 0); + return TRUE; } gint32 diff --git a/mono/metadata/icall.c b/mono/metadata/icall.c index 33376d73492..fad74732cf4 100644 --- a/mono/metadata/icall.c +++ b/mono/metadata/icall.c @@ -6885,17 +6885,19 @@ ves_icall_System_Environment_get_HasShutdownStarted (void) } #ifndef HOST_WIN32 -static inline void -mono_icall_broadcast_setting_change (void) +static inline MonoBoolean +mono_icall_broadcast_setting_change (MonoError *error) { - return; + error_init (error); + return TRUE; } #endif /* !HOST_WIN32 */ ICALL_EXPORT void -ves_icall_System_Environment_BroadcastSettingChange (void) +ves_icall_System_Environment_BroadcastSettingChange (MonoError *error) { - mono_icall_broadcast_setting_change (); + error_init (error); + mono_icall_broadcast_setting_change (error); } ICALL_EXPORT -- 2.25.1