typedef struct Manager Manager;
-typedef enum ManagerExitCode {
+typedef enum ManagerState {
+ MANAGER_STARTING,
MANAGER_RUNNING,
+ MANAGER_DEGRADED,
+ MANAGER_MAINTENANCE,
+ MANAGER_STOPPING,
+ _MANAGER_STATE_MAX,
+ _MANAGER_STATE_INVALID = -1
+} ManagerState;
+
+typedef enum ManagerExitCode {
+ MANAGER_OK,
MANAGER_EXIT,
MANAGER_RELOAD,
MANAGER_REEXECUTE,
#include "path-lookup.h"
#include "execute.h"
#include "unit-name.h"
+#include "exit-status.h"
+#include "show-status.h"
struct Manager {
/* Note that the set of units we know of is allowed to be
sd_event *event;
- Hashmap *watch_pids; /* pid => Unit object n:1 */
+ /* We use two hash tables here, since the same PID might be
+ * watched by two different units: once the unit that forked
+ * it off, and possibly a different unit to which it was
+ * joined as cgroup member. Since we know that it is either
+ * one or two units for each PID we just use to hashmaps
+ * here. */
+ Hashmap *watch_pids1; /* pid => Unit object n:1 */
+ Hashmap *watch_pids2; /* pid => Unit object n:1 */
+
+ /* A set which contains all currently failed units */
+ Set *failed_units;
sd_event_source *run_queue_event_source;
Set *private_buses;
int private_listen_fd;
sd_event_source *private_listen_event_source;
- Set *subscribed;
+
+ /* Contains all the clients that are subscribed to signals via
+ the API bus. Note that private bus connections are always
+ considered subscribes, since they last for very short only,
+ and it is much simpler that way. */
+ sd_bus_track *subscribed;
+ char **deserialized_subscribed;
sd_bus_message *queued_message; /* This is used during reloading:
* before the reload we queue the
bool taint_usr:1;
- bool show_status;
+ ShowStatus show_status;
bool confirm_spawn;
bool no_console_output;
ExecOutput default_std_output, default_std_error;
- usec_t default_restart_usec, default_timeout_start_usec,
- default_timeout_stop_usec;
+ usec_t default_restart_usec, default_timeout_start_usec, default_timeout_stop_usec;
usec_t default_start_limit_interval;
unsigned default_start_limit_burst;
- struct rlimit *rlimit[RLIMIT_NLIMITS];
+ bool default_cpu_accounting;
+ bool default_memory_accounting;
+ bool default_blockio_accounting;
+ usec_t default_cpu_quota_period_usec;
+
+ usec_t default_timer_accuracy_usec;
+
+ struct rlimit *rlimit[_RLIMIT_MAX];
/* non-zero if we are reloading or reexecuting, */
int n_reloading;
void manager_recheck_journal(Manager *m);
-void manager_set_show_status(Manager *m, bool b);
+void manager_set_show_status(Manager *m, ShowStatus mode);
void manager_status_printf(Manager *m, bool ephemeral, const char *status, const char *format, ...) _printf_(4,5);
+void manager_flip_auto_status(Manager *m, bool enable);
Set *manager_get_units_requiring_mounts_for(Manager *m, const char *path);
+
+const char *manager_get_runtime_prefix(Manager *m);
+
+ManagerState manager_state(Manager *m);
+
+const char *manager_state_to_string(ManagerState m) _const_;
+ManagerState manager_state_from_string(const char *s) _pure_;