coredump: turn off coredump collection only when PID 1 crashes, not when journald...
authorLennart Poettering <lennart@poettering.net>
Mon, 25 Jul 2016 17:03:43 +0000 (19:03 +0200)
committerEvgeny Vereshchagin <evvers@ya.ru>
Mon, 25 Jul 2016 17:03:43 +0000 (20:03 +0300)
As suggested:

https://github.com/systemd/systemd/pull/3783/files/5157879b757bffce3da0a68ca207753569e8627d#r71906971

src/coredump/coredump.c

index 043d785..dcc09fc 100644 (file)
@@ -918,9 +918,6 @@ static int process_special_crash(const char *context[], int input_fd) {
 
         log_notice("Detected coredump of the journal daemon or PID 1, diverted to %s.", filename);
 
-        log_notice("Due to the special circumstances, coredump collection will now be turned off.");
-        (void) write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", 0);
-
         return 0;
 }
 
@@ -980,6 +977,12 @@ static int process_kernel(int argc, char* argv[]) {
 
         if (cg_pid_get_unit(pid, &t) >= 0) {
 
+                /* If this is PID 1 disable coredump collection, we'll unlikely be able to process it later on. */
+                if (streq(t, SPECIAL_INIT_SCOPE)) {
+                        log_notice("Due to PID 1 having crashed coredump collection will now be turned off.");
+                        (void) write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", 0);
+                }
+
                 /* Let's avoid dead-locks when processing journald and init crashes, as socket activation and logging
                  * are unlikely to work then. */
                 if (STR_IN_SET(t, SPECIAL_JOURNALD_SERVICE, SPECIAL_INIT_SCOPE)) {