void signal_init(const char *argv0, char *err, size_t err_len, const struct logc *lc) { if ((g_alt_stack.ss_sp != NULL) || (g_crash_log_fd != -1)) { snprintf(err, err_len, "signal_init: already " "initialized!"); return; } if (lc->crash_log_path) { g_crash_log_fd = open(lc->crash_log_path, O_CREAT | O_TRUNC | O_RDWR, 0640); if (g_crash_log_fd < 0) { int ret = errno; snprintf(err, err_len, "signal_init: open(%s) " "failed: error %d", lc->crash_log_path, ret); signal_shutdown(); return; } } else { g_crash_log_fd = STDERR_FILENO; } if (lc->fast_log_path) { g_fast_log_fd = open(lc->fast_log_path, O_CREAT | O_TRUNC | O_WRONLY, 0640); if (g_fast_log_fd < 0) { int ret = errno; snprintf(err, err_len, "signal_init: open(%s) " "failed: error %d", lc->crash_log_path, ret); signal_shutdown(); return; } } else { g_fast_log_fd = STDERR_FILENO; } signal_init_altstack(err, err_len, &g_alt_stack); if (err[0]) { signal_shutdown(); return; } signal_set_dispositions(err, err_len); if (err[0]) { signal_shutdown(); return; } if (lc->use_syslog) { g_use_syslog = 1; openlog(argv0, LOG_NDELAY | LOG_PID, LOG_USER); } else { g_use_syslog = 0; } }
static void initiate_shutdown() { stopgameserver(SHUTDOWN_NORMAL); event_shutdown(event_listeners(), boost::make_tuple(static_cast<int>(SHUTDOWN_NORMAL))); signal_shutdown(SHUTDOWN_NORMAL); // Now wait for the main event loop to process work that is remaining and then exit }
void process_ctx_shutdown(void) { signal_shutdown(); if (g_fast_log_mgr) { fast_log_mgr_release(g_fast_log_mgr); g_fast_log_mgr = NULL; } close_glitch_log(); }
static int process_ctx_init_impl(const char *argv0, int daemonize, struct logc *lc) { char err[512] = { 0 }; size_t err_len = sizeof(err); configure_glitch_log(lc); g_fast_log_mgr = fast_log_mgr_init(g_fast_log_dumpers); if (IS_ERR(g_fast_log_mgr)) { glitch_log("fast_log_mgr_init failed with error %d", PTR_ERR(g_fast_log_mgr)); g_fast_log_mgr = NULL; goto error_close_glitchlog; } if (lc->fast_log == JORM_INVAL_STR) configure_fast_log(getenv("REDFISH_LOG")); else configure_fast_log(lc->fast_log); signal_init(argv0, err, err_len, lc); if (err[0]) { glitch_log("signal_init error: %s\n", err); goto error_free_fast_log_mgr; } if (daemonize) { if (daemon(0, 0) < 0) { int ret = errno; glitch_log("daemon(3) error %d\n", ret); goto error_signal_shutdown; } } create_pid_file(lc, err, err_len); if (err[0]) { glitch_log("create_pid_file error: %s\n", err); goto error_signal_shutdown; } return 0; error_signal_shutdown: signal_shutdown(); error_free_fast_log_mgr: fast_log_mgr_release(g_fast_log_mgr); g_fast_log_mgr = NULL; error_close_glitchlog: close_glitch_log(); return 1; }
static void reload_hopmod_now() { event_reloadhopmod(event_listeners(), boost::make_tuple()); reloaded = true; event_shutdown(event_listeners(), boost::make_tuple(static_cast<int>(SHUTDOWN_RELOAD))); signal_shutdown(SHUTDOWN_RELOAD); signal_shutdown.disconnect_all_slots(); init_hopmod(); server::started(); std::cout<<"-> Reloaded Hopmod."<<std::endl; reloaded = false; }