chiark / gitweb /
units: make sure systemd sockets are installed before sockets.target
[elogind.git] / src / manager.c
index a71150d0a93e46ec4695d3afbc3a540beb2c0d6b..735a1aaa4de9a5716b3db279984e87d1e7b65f6f 100644 (file)
@@ -625,9 +625,8 @@ int manager_coldplug(Manager *m) {
                 if (u->meta.id != k)
                         continue;
 
-                if (UNIT_VTABLE(u)->coldplug)
-                        if ((q = UNIT_VTABLE(u)->coldplug(u)) < 0)
-                                r = q;
+                if ((q = unit_coldplug(u)) < 0)
+                        r = q;
         }
 
         return r;
@@ -1892,10 +1891,32 @@ static int manager_process_signal_fd(Manager *m) {
                         break;
                 }
 
-                case SIGUSR2:
-                        manager_dump_units(m, stdout, "\t");
-                        manager_dump_jobs(m, stdout, "\t");
+                case SIGUSR2: {
+                        FILE *f;
+                        char *dump = NULL;
+                        size_t size;
+
+                        if (!(f = open_memstream(&dump, &size))) {
+                                log_warning("Failed to allocate memory stream.");
+                                break;
+                        }
+
+                        manager_dump_units(m, f, "\t");
+                        manager_dump_jobs(m, f, "\t");
+
+                        if (ferror(f)) {
+                                fclose(f);
+                                free(dump);
+                                log_warning("Failed to write status stream");
+                                break;
+                        }
+
+                        fclose(f);
+                        log_dump(LOG_INFO, dump);
+                        free(dump);
+
                         break;
+                }
 
                 case SIGHUP:
                         m->exit_code = MANAGER_RELOAD;