From ffba393bc235c41de749afbbd1856fb5f00d693e Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 16 Oct 2009 16:54:54 +0000 Subject: [PATCH] fix win shutdown in both places git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15169 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_core.c | 48 +++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/switch_core.c b/src/switch_core.c index dac26e80e1..cd90384443 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1528,6 +1528,28 @@ SWITCH_DECLARE(switch_time_t) switch_core_uptime(void) return switch_micro_time_now() - runtime.initiated; } + +#ifdef _MSC_VER +static void win_shutdown(void) +{ + + HANDLE shutdown_event; + char path[512]; + /* for windows we need the event to signal for shutting down a background FreeSWITCH */ + snprintf(path, sizeof(path), "Global\\Freeswitch.%d", getpid()); + + /* open the event so we can signal it */ + shutdown_event = OpenEvent(EVENT_MODIFY_STATE, FALSE, path); + + if (shutdown_event) { + /* signal the event to shutdown */ + SetEvent(shutdown_event); + /* cleanup */ + CloseHandle(shutdown_event); + } +} +#endif + SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, int32_t *val) { if (switch_test_flag((&runtime), SCF_SHUTTING_DOWN)) { @@ -1579,11 +1601,18 @@ SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, int32_ if (switch_test_flag((&runtime), SCF_SHUTDOWN_REQUESTED)) { switch_set_flag((&runtime), SCF_NO_NEW_SESSIONS); +#ifdef _MSC_VER + win_shutdown(); +#endif + if (*val) { switch_set_flag((&runtime), SCF_RESTART); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Restarting\n"); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Shutting down\n"); +#ifdef _MSC_VER + fclose(stdin); +#endif } runtime.running = 0; } else { @@ -1595,26 +1624,9 @@ SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, int32_ case SCSC_SHUTDOWN: #ifdef _MSC_VER - { - HANDLE shutdown_event; - char path[512]; - /* for windows we need the event to signal for shutting down a background FreeSWITCH */ - snprintf(path, sizeof(path), "Global\\Freeswitch.%d", getpid()); - - /* open the event so we can signal it */ - shutdown_event = OpenEvent(EVENT_MODIFY_STATE, FALSE, path); - - - if (shutdown_event) { - /* signal the event to shutdown */ - SetEvent(shutdown_event); - /* cleanup */ - CloseHandle(shutdown_event); - } - } + win_shutdown(); #endif - if (*val) { switch_set_flag((&runtime), SCF_RESTART); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Restarting\n");