From 9e83e746c6446a22c2e77094935c2cb44d6ba0c2 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Dec 12 2020 01:37:31 +0000 Subject: Refactor: pacemakerd: use existing handle for corosync shutdown --- diff --git a/daemons/pacemakerd/pacemakerd.c b/daemons/pacemakerd/pacemakerd.c index 0f459c0..fb35dfc 100644 --- a/daemons/pacemakerd/pacemakerd.c +++ b/daemons/pacemakerd/pacemakerd.c @@ -30,10 +30,6 @@ #include #include -#ifdef SUPPORT_COROSYNC -#include -#endif - #include #include @@ -145,28 +141,6 @@ pcmk_process_exit(pcmk_child_t * child) } } -static void pcmk_exit_with_cluster(int exitcode) -{ -#ifdef SUPPORT_COROSYNC - corosync_cfg_handle_t cfg_handle; - cs_error_t err; - - if (exitcode == CRM_EX_FATAL) { - crm_info("Asking Corosync to shut down"); - err = corosync_cfg_initialize(&cfg_handle, NULL); - if (err != CS_OK) { - crm_warn("Unable to open handle to corosync to close it down. err=%d", err); - } - err = corosync_cfg_try_shutdown(cfg_handle, COROSYNC_CFG_SHUTDOWN_FLAG_IMMEDIATE); - if (err != CS_OK) { - crm_warn("Corosync shutdown failed. err=%d", err); - } - corosync_cfg_finalize(cfg_handle); - } -#endif - crm_exit(exitcode); -} - static void pcmk_child_exit(mainloop_child_t * p, pid_t pid, int core, int signo, int exitcode) { @@ -475,7 +449,10 @@ pcmk_shutdown_worker(gpointer user_data) if (fatal_error) { crm_notice("Shutting down and staying down after fatal error"); - pcmk_exit_with_cluster(CRM_EX_FATAL); +#ifdef SUPPORT_COROSYNC + pcmkd_shutdown_corosync(); +#endif + crm_exit(CRM_EX_FATAL); } return TRUE; diff --git a/daemons/pacemakerd/pacemakerd.h b/daemons/pacemakerd/pacemakerd.h index ac2d842..5f475fd 100644 --- a/daemons/pacemakerd/pacemakerd.h +++ b/daemons/pacemakerd/pacemakerd.h @@ -24,5 +24,6 @@ gboolean mcp_read_config(void); gboolean cluster_connect_cfg(void); gboolean cluster_disconnect_cfg(void); +void pcmkd_shutdown_corosync(void); void pcmk_shutdown(int nsig); diff --git a/daemons/pacemakerd/pcmkd_corosync.c b/daemons/pacemakerd/pcmkd_corosync.c index 6f19803..82bd257 100644 --- a/daemons/pacemakerd/pcmkd_corosync.c +++ b/daemons/pacemakerd/pcmkd_corosync.c @@ -28,7 +28,7 @@ #include /* PCMK__SPECIAL_PID* */ -static corosync_cfg_handle_t cfg_handle; +static corosync_cfg_handle_t cfg_handle = 0; /* =::=::=::= CFG - Shutdown stuff =::=::=::= */ @@ -151,6 +151,28 @@ cluster_connect_cfg(void) return FALSE; } +void +pcmkd_shutdown_corosync(void) +{ + cs_error_t rc; + + if (cfg_handle == 0) { + crm_warn("Unable to shut down Corosync: No connection"); + return; + } + crm_info("Asking Corosync to shut down"); + rc = corosync_cfg_try_shutdown(cfg_handle, + COROSYNC_CFG_SHUTDOWN_FLAG_IMMEDIATE); + if (rc == CS_OK) { + corosync_cfg_finalize(cfg_handle); + cfg_handle = 0; + } else { + crm_warn("Corosync shutdown failed: %s " CRM_XS " rc=%d", + cs_strerror(rc), rc); + } +} + + /* =::=::=::= Configuration =::=::=::= */ static int get_config_opt(uint64_t unused, cmap_handle_t object_handle, const char *key, char **value,