Blame SOURCES/bz720543-pcmk-command_line_tools_should_stop_after_an_assertion_failure.patch

ed0026
commit 5a743a9378faf251d03f19f37facd2ddfc19989b
ed0026
Author: Andrew Beekhof <andrew@beekhof.net>
ed0026
Date:   Tue Aug 6 13:36:45 2013 +1000
ed0026
ed0026
    Fix: Command-line tools should stop after an assertion failure
ed0026
    
ed0026
    (cherry picked from commit 912db519b293ab18840c36e0b5d91b3ee6e205dd)
ed0026
ed0026
diff --git a/lib/common/logging.c b/lib/common/logging.c
ed0026
index 0b85093..571cd03 100644
ed0026
--- a/lib/common/logging.c
ed0026
+++ b/lib/common/logging.c
ed0026
@@ -46,6 +46,7 @@ unsigned int crm_log_priority = LOG_NOTICE;
ed0026
 unsigned int crm_log_level = LOG_INFO;
ed0026
 static gboolean crm_tracing_enabled(void);
ed0026
 unsigned int crm_trace_nonlog = 0;
ed0026
+bool crm_is_daemon = 0;
ed0026
 
ed0026
 #ifdef HAVE_G_LOG_SET_DEFAULT_HANDLER
ed0026
 GLogFunc glib_log_default;
ed0026
@@ -626,6 +627,8 @@ crm_log_init(const char *entity, int level, gboolean daemon, gboolean to_stderr,
ed0026
     const char *facility = daemon_option("logfacility");
ed0026
     const char *f_copy = facility;
ed0026
 
ed0026
+    crm_is_daemon = daemon;
ed0026
+
ed0026
     if (crm_trace_nonlog == 0) {
ed0026
         crm_trace_nonlog = g_quark_from_static_string("Pacemaker non-logging tracepoint");
ed0026
     }
ed0026
@@ -711,11 +714,11 @@ crm_log_init(const char *entity, int level, gboolean daemon, gboolean to_stderr,
ed0026
         qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_ENABLED, QB_FALSE);
ed0026
     }
ed0026
 
ed0026
-    if (daemon) {
ed0026
+    if (crm_is_daemon) {
ed0026
         set_daemon_option("logfacility", facility);
ed0026
     }
ed0026
 
ed0026
-    if (daemon && crm_tracing_enabled()
ed0026
+    if (crm_is_daemon && crm_tracing_enabled()
ed0026
         && qb_log_ctl(QB_LOG_STDERR, QB_LOG_CONF_STATE_GET, 0) != QB_LOG_STATE_ENABLED
ed0026
         && qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_STATE_GET, 0) != QB_LOG_STATE_ENABLED) {
ed0026
         /* Make sure tracing goes somewhere */
ed0026
@@ -725,20 +728,20 @@ crm_log_init(const char *entity, int level, gboolean daemon, gboolean to_stderr,
ed0026
     crm_update_callsites();
ed0026
 
ed0026
     /* Ok, now we can start logging... */
ed0026
-    if (quiet == FALSE && daemon == FALSE) {
ed0026
+    if (quiet == FALSE && crm_is_daemon == FALSE) {
ed0026
         crm_log_args(argc, argv);
ed0026
     }
ed0026
 
ed0026
-    if (daemon) {
ed0026
+    if (crm_is_daemon) {
ed0026
         const char *user = getenv("USER");
ed0026
 
ed0026
         if (user != NULL && safe_str_neq(user, "root") && safe_str_neq(user, CRM_DAEMON_USER)) {
ed0026
             crm_trace("Not switching to corefile directory for %s", user);
ed0026
-            daemon = FALSE;
ed0026
+            crm_is_daemon = FALSE;
ed0026
         }
ed0026
     }
ed0026
 
ed0026
-    if (daemon) {
ed0026
+    if (crm_is_daemon) {
ed0026
         int user = getuid();
ed0026
         const char *base = CRM_CORE_DIR;
ed0026
         struct passwd *pwent = getpwuid(user);
ed0026
diff --git a/lib/common/utils.c b/lib/common/utils.c
ed0026
index 069b5c8..527c9e0 100644
ed0026
--- a/lib/common/utils.c
ed0026
+++ b/lib/common/utils.c
ed0026
@@ -1085,6 +1085,8 @@ filter_reload_parameters(xmlNode * param_set, const char *restart_string)
ed0026
     }
ed0026
 }
ed0026
 
ed0026
+extern bool crm_is_daemon;
ed0026
+
ed0026
 /* coverity[+kill] */
ed0026
 void
ed0026
 crm_abort(const char *file, const char *function, int line,
ed0026
@@ -1097,6 +1099,14 @@ crm_abort(const char *file, const char *function, int line,
ed0026
     /* Implied by the parent's error logging below */
ed0026
     /* crm_write_blackbox(0); */
ed0026
 
ed0026
+    if(crm_is_daemon == FALSE) {
ed0026
+        /* This is a command line tool - do not fork */
ed0026
+
ed0026
+        /* crm_add_logfile(NULL);   * Record it to a file? */
ed0026
+        crm_enable_stderr(TRUE); /* Make sure stderr is enabled so we can tell the caller */
ed0026
+        do_fork = FALSE;         /* Just crash if needed */
ed0026
+    }
ed0026
+
ed0026
     if (do_core == FALSE) {
ed0026
         crm_err("%s: Triggered assert at %s:%d : %s", function, file, line, assert_condition);
ed0026
         return;