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");