コード例 #1
0
ファイル: signal.c プロジェクト: cmccabe/redfish
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;
	}
}
コード例 #2
0
ファイル: startup.cpp プロジェクト: Gleuwuzah/server-v4
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
}
コード例 #3
0
ファイル: process_ctx.c プロジェクト: cmccabe/redfish
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();
}
コード例 #4
0
ファイル: process_ctx.c プロジェクト: cmccabe/redfish
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;
}
コード例 #5
0
ファイル: startup.cpp プロジェクト: Gleuwuzah/server-v4
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;
}