From: Daan De Meyer Date: Fri, 18 Apr 2025 18:53:51 +0000 (+0200) Subject: core: Remove circular dependencies between headers X-Git-Tag: v258-rc1~756^2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4ea4abb6518638087ed8beb0e1a2486d97b4fd18;p=thirdparty%2Fsystemd.git core: Remove circular dependencies between headers Currently there are various circular dependencies between headers in core/. Let's get rid of these by making judicious use of forward declarations and moving includes into implementation files instead of having them in header files. Getting rid of circular header includes simplifies the code and makes various clang based tooling such as iwyu work much better on our code. The most important change is getting rid of the manager.h include in unit.h which is possible thanks to the previous commits. We also move the OOMPolicy and StatusType enums to unit.h to remove the need for other unit headers to include manager.h to get access to these enums. --- diff --git a/src/core/all-units.h b/src/core/all-units.h index fad814bf20f..cb2563d2c88 100644 --- a/src/core/all-units.h +++ b/src/core/all-units.h @@ -5,6 +5,7 @@ #include "automount.h" #include "device.h" +#include "mount.h" #include "path.h" #include "scope.h" #include "service.h" diff --git a/src/core/automount.c b/src/core/automount.c index b4611981f2c..ef5db87a7e1 100644 --- a/src/core/automount.c +++ b/src/core/automount.c @@ -22,6 +22,7 @@ #include "io-util.h" #include "label-util.h" #include "mkdir-label.h" +#include "manager.h" #include "mount-util.h" #include "mount.h" #include "mountpoint-util.h" diff --git a/src/core/automount.h b/src/core/automount.h index e413f237cad..6f2ca7657bc 100644 --- a/src/core/automount.h +++ b/src/core/automount.h @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Automount Automount; - #include "unit.h" typedef enum AutomountResult { @@ -15,7 +13,7 @@ typedef enum AutomountResult { _AUTOMOUNT_RESULT_INVALID = -EINVAL, } AutomountResult; -struct Automount { +typedef struct Automount { Unit meta; AutomountState state, deserialized_state; @@ -35,7 +33,7 @@ struct Automount { sd_event_source *expire_event_source; AutomountResult result; -}; +} Automount; extern const UnitVTable automount_vtable; diff --git a/src/core/bpf-firewall.c b/src/core/bpf-firewall.c index 69000c1389f..85fce6f32a3 100644 --- a/src/core/bpf-firewall.c +++ b/src/core/bpf-firewall.c @@ -20,6 +20,7 @@ #include "bpf-program.h" #include "fd-util.h" #include "in-addr-prefix-util.h" +#include "manager.h" #include "memory-util.h" #include "missing_syscall.h" #include "unit.h" diff --git a/src/core/bpf-restrict-ifaces.c b/src/core/bpf-restrict-ifaces.c index af49abd677b..a9066ee2a91 100644 --- a/src/core/bpf-restrict-ifaces.c +++ b/src/core/bpf-restrict-ifaces.c @@ -3,6 +3,7 @@ #include "fd-util.h" #include "bpf-restrict-ifaces.h" #include "netlink-util.h" +#include "unit.h" #if BPF_FRAMEWORK /* libbpf, clang and llc compile time dependencies are satisfied */ diff --git a/src/core/bpf-restrict-ifaces.h b/src/core/bpf-restrict-ifaces.h index 28f74279f51..80af1f3e5b8 100644 --- a/src/core/bpf-restrict-ifaces.h +++ b/src/core/bpf-restrict-ifaces.h @@ -2,7 +2,6 @@ #pragma once #include "fdset.h" -#include "unit.h" typedef struct Unit Unit; diff --git a/src/core/bpf-socket-bind.c b/src/core/bpf-socket-bind.c index 8853f3eecc9..437b084392d 100644 --- a/src/core/bpf-socket-bind.c +++ b/src/core/bpf-socket-bind.c @@ -6,6 +6,7 @@ #include "fd-util.h" #include "bpf-socket-bind.h" +#include "unit.h" #if BPF_FRAMEWORK /* libbpf, clang, llvm and bpftool compile time dependencies are satisfied */ diff --git a/src/core/bpf-socket-bind.h b/src/core/bpf-socket-bind.h index 28b25f68724..13a0fc15215 100644 --- a/src/core/bpf-socket-bind.h +++ b/src/core/bpf-socket-bind.h @@ -2,7 +2,8 @@ #pragma once #include "fdset.h" -#include "unit.h" + +typedef struct Unit Unit; int bpf_socket_bind_supported(void); diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 7e4f7efa5e5..27d81b0b858 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -27,6 +27,7 @@ #include "io-util.h" #include "ip-protocol-list.h" #include "limits-util.h" +#include "manager.h" #include "nulstr-util.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/core/core-varlink.c b/src/core/core-varlink.c index c5735d0eaa1..0dee43c01b2 100644 --- a/src/core/core-varlink.c +++ b/src/core/core-varlink.c @@ -3,9 +3,12 @@ #include "sd-varlink.h" #include "core-varlink.h" +#include "dynamic-user.h" #include "json-util.h" +#include "manager.h" #include "mkdir-label.h" #include "strv.h" +#include "unit.h" #include "user-util.h" #include "varlink-internal.h" #include "varlink-io.systemd.UserDatabase.h" diff --git a/src/core/core-varlink.h b/src/core/core-varlink.h index 4b776200289..e4996f01ada 100644 --- a/src/core/core-varlink.h +++ b/src/core/core-varlink.h @@ -1,7 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include "manager.h" +typedef struct Manager Manager; +typedef struct Unit Unit; int manager_setup_varlink_server(Manager *m); diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c index 882c916c102..09692a93ec5 100644 --- a/src/core/dbus-cgroup.c +++ b/src/core/dbus-cgroup.c @@ -22,6 +22,7 @@ #include "in-addr-prefix-util.h" #include "ip-protocol-list.h" #include "limits-util.h" +#include "manager.h" #include "memstream-util.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/core/dbus-execute.h b/src/core/dbus-execute.h index 4b7cb86d3e5..4ad7dd27a9d 100644 --- a/src/core/dbus-execute.h +++ b/src/core/dbus-execute.h @@ -5,6 +5,7 @@ #include "sd-bus-vtable.h" #include "execute.h" +#include "unit.h" #define BUS_EXEC_STATUS_VTABLE(prefix, offset, flags) \ BUS_PROPERTY_DUAL_TIMESTAMP(prefix "StartTimestamp", (offset) + offsetof(ExecStatus, start_timestamp), flags), \ diff --git a/src/core/dbus-job.h b/src/core/dbus-job.h index 6f005811cb2..50957303de6 100644 --- a/src/core/dbus-job.h +++ b/src/core/dbus-job.h @@ -3,9 +3,10 @@ #include "sd-bus.h" -#include "unit.h" #include "bus-object.h" +typedef struct Job Job; + extern const sd_bus_vtable bus_job_vtable[]; extern const BusObjectImplementation job_object; diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c index 6320e267a1e..903f45d1029 100644 --- a/src/core/dbus-manager.c +++ b/src/core/dbus-manager.c @@ -25,6 +25,7 @@ #include "dbus-unit.h" #include "dbus-util.h" #include "dbus.h" +#include "dynamic-user.h" #include "env-util.h" #include "fd-util.h" #include "fileio.h" diff --git a/src/core/dbus-manager.h b/src/core/dbus-manager.h index 9b050801a71..fcabca57c9c 100644 --- a/src/core/dbus-manager.h +++ b/src/core/dbus-manager.h @@ -3,7 +3,9 @@ #include "sd-bus-vtable.h" -#include "manager.h" +#include "time-util.h" + +typedef struct Manager Manager; extern const sd_bus_vtable bus_manager_vtable[]; extern const sd_bus_vtable bus_manager_log_control_vtable[]; diff --git a/src/core/dbus-scope.h b/src/core/dbus-scope.h index 8f1bc02e31c..fb7467a0f55 100644 --- a/src/core/dbus-scope.h +++ b/src/core/dbus-scope.h @@ -4,9 +4,10 @@ #include "sd-bus.h" #include "sd-bus-vtable.h" -#include "scope.h" #include "unit.h" +typedef struct Scope Scope; + extern const sd_bus_vtable bus_scope_vtable[]; int bus_scope_set_property(Unit *u, const char *name, sd_bus_message *i, UnitWriteFlags flags, sd_bus_error *error); diff --git a/src/core/dbus-util.c b/src/core/dbus-util.c index b44afc42587..e1a4cf0bdc1 100644 --- a/src/core/dbus-util.c +++ b/src/core/dbus-util.c @@ -4,6 +4,7 @@ #include "bus-util.h" #include "dbus-util.h" #include "escape.h" +#include "manager.h" #include "parse-util.h" #include "path-util.h" #include "reboot-util.h" diff --git a/src/core/dbus.h b/src/core/dbus.h index bfd4c8ea4e5..a362a652af0 100644 --- a/src/core/dbus.h +++ b/src/core/dbus.h @@ -3,7 +3,9 @@ #include "sd-bus.h" -#include "manager.h" +#include "fdset.h" + +typedef struct Manager Manager; void bus_send_pending_reload_message(Manager *m); diff --git a/src/core/device.c b/src/core/device.c index b6cdee73d44..08235caa42c 100644 --- a/src/core/device.c +++ b/src/core/device.c @@ -13,6 +13,7 @@ #include "device-util.h" #include "device.h" #include "log.h" +#include "manager.h" #include "parse-util.h" #include "path-util.h" #include "ratelimit.h" diff --git a/src/core/device.h b/src/core/device.h index 631f45d45eb..6f42cfa93ab 100644 --- a/src/core/device.h +++ b/src/core/device.h @@ -3,8 +3,6 @@ #include "unit.h" -typedef struct Device Device; - /* A mask specifying where we have seen the device currently. This is a bitmask because the device might show up * asynchronously from each other at various places. For example, in very common case a device might already be mounted * before udev finished probing it (think: a script setting up a loopback block device, formatting it and mounting it @@ -17,7 +15,7 @@ typedef enum DeviceFound { _DEVICE_FOUND_MASK = DEVICE_FOUND_UDEV|DEVICE_FOUND_MOUNT|DEVICE_FOUND_SWAP, } DeviceFound; -struct Device { +typedef struct Device { Unit meta; char *sysfs, *deserialized_sysfs; @@ -36,7 +34,7 @@ struct Device { /* The SYSTEMD_WANTS udev property for this device the last time we saw it */ char **wants_property; -}; +} Device; extern const UnitVTable device_vtable; diff --git a/src/core/dynamic-user.c b/src/core/dynamic-user.c index acfa1f52afb..d21c709de73 100644 --- a/src/core/dynamic-user.c +++ b/src/core/dynamic-user.c @@ -12,6 +12,7 @@ #include "fs-util.h" #include "iovec-util.h" #include "lock-util.h" +#include "manager.h" #include "parse-util.h" #include "random-util.h" #include "serialize.h" diff --git a/src/core/dynamic-user.h b/src/core/dynamic-user.h index 303a7d081c9..594595038d3 100644 --- a/src/core/dynamic-user.h +++ b/src/core/dynamic-user.h @@ -1,7 +1,15 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include +#include +#include + +#include "fdset.h" +#include "memory-util.h" + typedef struct DynamicUser DynamicUser; +typedef struct Manager Manager; typedef struct DynamicCreds { /* A combination of a dynamic user and group */ @@ -9,8 +17,6 @@ typedef struct DynamicCreds { DynamicUser *group; } DynamicCreds; -#include "manager.h" - /* Note that this object always allocates a pair of user and group under the same name, even if one of them isn't * used. This means, if you want to allocate a group and user pair, and they might have two different names, then you * need to allocated two of these objects. DynamicCreds below makes that easy. */ diff --git a/src/core/emergency-action.c b/src/core/emergency-action.c index 2d756b306c9..6752926bd96 100644 --- a/src/core/emergency-action.c +++ b/src/core/emergency-action.c @@ -6,6 +6,7 @@ #include "bus-error.h" #include "bus-util.h" #include "emergency-action.h" +#include "manager.h" #include "raw-reboot.h" #include "reboot-util.h" #include "special.h" diff --git a/src/core/emergency-action.h b/src/core/emergency-action.h index 5f7b0b4bc9b..d0f1898a60d 100644 --- a/src/core/emergency-action.h +++ b/src/core/emergency-action.h @@ -3,8 +3,11 @@ #include +#include "macro.h" #include "runtime-scope.h" +typedef struct Manager Manager; + typedef enum EmergencyAction { EMERGENCY_ACTION_NONE, EMERGENCY_ACTION_EXIT, @@ -34,9 +37,6 @@ typedef enum EmergencyActionFlags { _EMERGENCY_ACTION_FLAGS_MAX = (1 << 3) - 1, } EmergencyActionFlags; -#include "macro.h" -#include "manager.h" - void emergency_action( Manager *m, EmergencyAction action, diff --git a/src/core/exec-invoke.c b/src/core/exec-invoke.c index f22aad76d27..fcbd62744be 100644 --- a/src/core/exec-invoke.c +++ b/src/core/exec-invoke.c @@ -24,11 +24,13 @@ #include "bpf-restrict-fs.h" #include "btrfs-util.h" #include "capability-util.h" +#include "cgroup.h" #include "cgroup-setup.h" #include "chase.h" #include "chattr-util.h" #include "chown-recursive.h" #include "copy.h" +#include "dynamic-user.h" #include "env-util.h" #include "escape.h" #include "exec-credential.h" @@ -43,10 +45,12 @@ #include "ioprio-util.h" #include "iovec-util.h" #include "journal-send.h" +#include "manager.h" #include "memfd-util.h" #include "missing_sched.h" #include "missing_syscall.h" #include "mkdir-label.h" +#include "mount-util.h" #include "osc-context.h" #include "proc-cmdline.h" #include "process-util.h" diff --git a/src/core/execute-serialize.c b/src/core/execute-serialize.c index 380d6fa6bbb..0aea6fe8048 100644 --- a/src/core/execute-serialize.c +++ b/src/core/execute-serialize.c @@ -2,7 +2,9 @@ #include "af-list.h" #include "capability-util.h" +#include "cgroup.h" #include "cgroup-setup.h" +#include "dynamic-user.h" #include "escape.h" #include "exec-credential.h" #include "execute-serialize.h" diff --git a/src/core/execute.c b/src/core/execute.c index 76ad7345ca0..4aef0ad8198 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -25,6 +25,7 @@ #include "cgroup-setup.h" #include "constants.h" #include "cpu-set-util.h" +#include "dynamic-user.h" #include "env-file.h" #include "env-util.h" #include "errno-list.h" diff --git a/src/core/execute.h b/src/core/execute.h index 63d5b448def..9b449012b23 100644 --- a/src/core/execute.h +++ b/src/core/execute.h @@ -1,19 +1,11 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct ExecStatus ExecStatus; -typedef struct ExecCommand ExecCommand; -typedef struct ExecContext ExecContext; -typedef struct ExecSharedRuntime ExecSharedRuntime; -typedef struct DynamicCreds DynamicCreds; -typedef struct ExecRuntime ExecRuntime; -typedef struct ExecParameters ExecParameters; -typedef struct Manager Manager; - #include #include #include #include +#include #include "bus-unit-util.h" #include "cgroup-util.h" @@ -22,6 +14,7 @@ typedef struct Manager Manager; #include "exec-util.h" #include "fdset.h" #include "list.h" +#include "log-context.h" #include "namespace.h" #include "nsflags.h" #include "numa-util.h" @@ -34,6 +27,17 @@ typedef struct Manager Manager; #include "set.h" #include "time-util.h" +typedef struct CGroupContext CGroupContext; +typedef struct ExecStatus ExecStatus; +typedef struct ExecCommand ExecCommand; +typedef struct ExecContext ExecContext; +typedef struct ExecSharedRuntime ExecSharedRuntime; +typedef struct DynamicCreds DynamicCreds; +typedef struct ExecRuntime ExecRuntime; +typedef struct ExecParameters ExecParameters; +typedef struct Manager Manager; +typedef struct Unit Unit; + #define EXEC_STDIN_DATA_MAX (64U*1024U*1024U) typedef enum ExecUtmpMode { @@ -494,9 +498,6 @@ struct ExecParameters { .pidref_transport_fd = -EBADF, \ } -#include "unit.h" -#include "dynamic-user.h" - int exec_spawn( Unit *unit, ExecCommand *command, diff --git a/src/core/executor.c b/src/core/executor.c index bc3566a9fc4..daee9ea955a 100644 --- a/src/core/executor.c +++ b/src/core/executor.c @@ -9,6 +9,8 @@ #include "argv-util.h" #include "build.h" #include "capability-util.h" +#include "cgroup.h" +#include "dynamic-user.h" #include "exec-invoke.h" #include "execute-serialize.h" #include "execute.h" diff --git a/src/core/fuzz-execute-serialize.c b/src/core/fuzz-execute-serialize.c index 05abee5a4e6..67437549eaf 100644 --- a/src/core/fuzz-execute-serialize.c +++ b/src/core/fuzz-execute-serialize.c @@ -20,6 +20,7 @@ #include #include "alloc-util.h" +#include "dynamic-user.h" #include "execute-serialize.h" #include "fd-util.h" #include "fuzz.h" diff --git a/src/core/fuzz-unit-file.c b/src/core/fuzz-unit-file.c index 57480cf7663..d8987c9648d 100644 --- a/src/core/fuzz-unit-file.c +++ b/src/core/fuzz-unit-file.c @@ -5,6 +5,7 @@ #include "fuzz.h" #include "install.h" #include "load-fragment.h" +#include "manager.h" #include "manager-dump.h" #include "memstream-util.h" #include "string-util.h" diff --git a/src/core/job.c b/src/core/job.c index 4209a7c8d49..d051b3db6d5 100644 --- a/src/core/job.c +++ b/src/core/job.c @@ -16,6 +16,7 @@ #include "job.h" #include "log.h" #include "macro.h" +#include "manager.h" #include "parse-util.h" #include "serialize.h" #include "set.h" diff --git a/src/core/job.h b/src/core/job.h index 388890e368a..3c1e861bbc1 100644 --- a/src/core/job.h +++ b/src/core/job.h @@ -7,6 +7,8 @@ #include "sd-event.h" #include "list.h" +#include "memory-util.h" +#include "time-util.h" #include "unit-dependency-atom.h" typedef struct ActivationDetails ActivationDetails; diff --git a/src/core/kill.h b/src/core/kill.h index 3add663d719..97a295e1e57 100644 --- a/src/core/kill.h +++ b/src/core/kill.h @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct KillContext KillContext; - #include #include @@ -18,7 +16,7 @@ typedef enum KillMode { _KILL_MODE_INVALID = -EINVAL, } KillMode; -struct KillContext { +typedef struct KillContext { KillMode kill_mode; int kill_signal; int restart_kill_signal; @@ -26,7 +24,7 @@ struct KillContext { int watchdog_signal; bool send_sigkill; bool send_sighup; -}; +} KillContext; typedef enum KillWhom { /* Kill whom is a property of an operation */ diff --git a/src/core/load-dropin.c b/src/core/load-dropin.c index 5c1ccc966f6..0256f706357 100644 --- a/src/core/load-dropin.c +++ b/src/core/load-dropin.c @@ -1,16 +1,29 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include "conf-parser.h" +#include "dropin.h" #include "fs-util.h" #include "load-dropin.h" #include "load-fragment.h" #include "log.h" +#include "manager.h" #include "stat-util.h" #include "string-util.h" #include "strv.h" #include "unit-name.h" #include "unit.h" +int unit_find_dropin_paths(Unit *u, bool use_unit_path_cache, char ***paths) { + assert(u); + + return unit_file_find_dropin_paths(NULL, + u->manager->lookup_paths.search_path, + use_unit_path_cache ? u->manager->unit_path_cache : NULL, + ".d", ".conf", + u->id, u->aliases, + paths); +} + static int process_deps(Unit *u, UnitDependency dependency, const char *dir_suffix) { _cleanup_strv_free_ char **paths = NULL; int r; diff --git a/src/core/load-dropin.h b/src/core/load-dropin.h index 141bc7dd0f2..864ea4f0837 100644 --- a/src/core/load-dropin.h +++ b/src/core/load-dropin.h @@ -1,20 +1,12 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include "dropin.h" -#include "unit.h" +#include -/* Read service data supplementary drop-in directories */ +typedef struct Unit Unit; -static inline int unit_find_dropin_paths(Unit *u, bool use_unit_path_cache, char ***paths) { - assert(u); +/* Read service data supplementary drop-in directories */ - return unit_file_find_dropin_paths(NULL, - u->manager->lookup_paths.search_path, - use_unit_path_cache ? u->manager->unit_path_cache : NULL, - ".d", ".conf", - u->id, u->aliases, - paths); -} +int unit_find_dropin_paths(Unit *u, bool use_unit_path_cache, char ***paths); int unit_load_dropin(Unit *u); diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h index 0e68d1bb84a..6aa8f479f5d 100644 --- a/src/core/load-fragment.h +++ b/src/core/load-fragment.h @@ -2,7 +2,8 @@ #pragma once #include "conf-parser.h" -#include "unit.h" + +typedef struct Unit Unit; /* These functions are declared in the header to make them accessible to unit tests. */ bool contains_instance_specifier_superset(const char *s); diff --git a/src/core/manager-dump.c b/src/core/manager-dump.c index 7e678fa03ee..9cb184b4d2a 100644 --- a/src/core/manager-dump.c +++ b/src/core/manager-dump.c @@ -4,6 +4,7 @@ #include "fd-util.h" #include "fileio.h" #include "hashmap.h" +#include "manager.h" #include "manager-dump.h" #include "memstream-util.h" #include "unit-serialize.h" diff --git a/src/core/manager-dump.h b/src/core/manager-dump.h index 5b96f26f543..a02c29ad686 100644 --- a/src/core/manager-dump.h +++ b/src/core/manager-dump.h @@ -3,7 +3,7 @@ #include -#include "manager.h" +typedef struct Manager Manager; void manager_dump_jobs(Manager *s, FILE *f, char **patterns, const char *prefix); int manager_get_dump_jobs_string(Manager *m, char **patterns, const char *prefix, char **ret); diff --git a/src/core/manager-serialize.c b/src/core/manager-serialize.c index c5cb82e8d54..ae4472b38b6 100644 --- a/src/core/manager-serialize.c +++ b/src/core/manager-serialize.c @@ -5,6 +5,7 @@ #include "clean-ipc.h" #include "core-varlink.h" #include "dbus.h" +#include "dynamic-user.h" #include "fd-util.h" #include "fileio.h" #include "format-util.h" diff --git a/src/core/manager-serialize.h b/src/core/manager-serialize.h index c52261e3784..7d4e8effb28 100644 --- a/src/core/manager-serialize.h +++ b/src/core/manager-serialize.h @@ -2,10 +2,12 @@ #pragma once #include +#include -#include "manager.h" #include "fdset.h" +typedef struct Manager Manager; + #define DESTROY_IPC_FLAG (UINT32_C(1) << 31) int manager_open_serialization(Manager *m, FILE **ret_f); diff --git a/src/core/manager.c b/src/core/manager.c index cf000d8f218..15c8f2b90df 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -42,6 +42,7 @@ #include "dbus-unit.h" #include "dbus.h" #include "dirent-util.h" +#include "dynamic-user.h" #include "env-util.h" #include "escape.h" #include "event-util.h" @@ -5182,11 +5183,3 @@ static const char* const manager_timestamp_table[_MANAGER_TIMESTAMP_MAX] = { }; DEFINE_STRING_TABLE_LOOKUP(manager_timestamp, ManagerTimestamp); - -static const char* const oom_policy_table[_OOM_POLICY_MAX] = { - [OOM_CONTINUE] = "continue", - [OOM_STOP] = "stop", - [OOM_KILL] = "kill", -}; - -DEFINE_STRING_TABLE_LOOKUP(oom_policy, OOMPolicy); diff --git a/src/core/manager.h b/src/core/manager.h index a07c665e5b5..cbad223d1bf 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -9,14 +9,22 @@ #include "sd-event.h" #include "sd-varlink.h" -#include "common-signal.h" #include "cgroup-util.h" #include "cgroup.h" +#include "common-signal.h" +#include "emergency-action.h" +#include "execute.h" #include "fdset.h" #include "hashmap.h" +#include "job.h" #include "list.h" +#include "path-lookup.h" #include "prioq.h" #include "ratelimit.h" +#include "show-status.h" +#include "transaction.h" +#include "unit-name.h" +#include "unit.h" struct libmnt_monitor; typedef struct Unit Unit; @@ -62,21 +70,6 @@ typedef enum ManagerObjective { _MANAGER_OBJECTIVE_INVALID = -EINVAL, } ManagerObjective; -typedef enum StatusType { - STATUS_TYPE_EPHEMERAL, - STATUS_TYPE_NORMAL, - STATUS_TYPE_NOTICE, - STATUS_TYPE_EMERGENCY, -} StatusType; - -typedef enum OOMPolicy { - OOM_CONTINUE, /* The kernel or systemd-oomd kills the process it wants to kill, and that's it */ - OOM_STOP, /* The kernel or systemd-oomd kills the process it wants to kill, and we stop the unit */ - OOM_KILL, /* The kernel or systemd-oomd kills the process it wants to kill, and all others in the unit, and we stop the unit */ - _OOM_POLICY_MAX, - _OOM_POLICY_INVALID = -EINVAL, -} OOMPolicy; - /* Notes: * 1. TIMESTAMP_FIRMWARE, TIMESTAMP_LOADER, TIMESTAMP_KERNEL, TIMESTAMP_INITRD, * TIMESTAMP_SECURITY_START, and TIMESTAMP_SECURITY_FINISH are set only when @@ -135,14 +128,6 @@ typedef enum WatchdogType { _WATCHDOG_TYPE_MAX, } WatchdogType; -#include "execute.h" -#include "job.h" -#include "path-lookup.h" -#include "show-status.h" -#include "transaction.h" -#include "unit-name.h" -#include "unit.h" - typedef enum ManagerTestRunFlags { MANAGER_TEST_NORMAL = 0, /* run normally */ MANAGER_TEST_RUN_MINIMAL = 1 << 0, /* create basic data structures */ @@ -670,9 +655,6 @@ LogTarget manager_get_executor_log_target(Manager *m); int manager_allocate_idle_pipe(Manager *m); -const char* oom_policy_to_string(OOMPolicy i) _const_; -OOMPolicy oom_policy_from_string(const char *s) _pure_; - void unit_defaults_init(UnitDefaults *defaults, RuntimeScope scope); void unit_defaults_done(UnitDefaults *defaults); diff --git a/src/core/mount.h b/src/core/mount.h index 7fd643f6fa0..c754ae7933a 100644 --- a/src/core/mount.h +++ b/src/core/mount.h @@ -1,9 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Mount Mount; - -#include "dynamic-user.h" #include "kill.h" #include "pidref.h" #include "unit.h" @@ -42,7 +39,7 @@ typedef enum MountProcFlags { MOUNT_PROC_JUST_CHANGED = 1 << 2, } MountProcFlags; -struct Mount { +typedef struct Mount { Unit meta; char *where; @@ -88,7 +85,7 @@ struct Mount { sd_event_source *timer_event_source; unsigned n_retry_umount; -}; +} Mount; extern const UnitVTable mount_vtable; diff --git a/src/core/path.c b/src/core/path.c index 4556dbfc71a..364d94f528e 100644 --- a/src/core/path.c +++ b/src/core/path.c @@ -16,6 +16,7 @@ #include "glob-util.h" #include "inotify-util.h" #include "macro.h" +#include "manager.h" #include "mkdir-label.h" #include "path.h" #include "path-util.h" diff --git a/src/core/path.h b/src/core/path.h index cb5b6629110..8a3b8b35924 100644 --- a/src/core/path.h +++ b/src/core/path.h @@ -1,10 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Path Path; -typedef struct PathSpec PathSpec; -typedef struct ActivationDetailsPath ActivationDetailsPath; - #include "unit.h" typedef enum PathType { @@ -52,7 +48,7 @@ typedef enum PathResult { _PATH_RESULT_INVALID = -EINVAL, } PathResult; -struct Path { +typedef struct Path { Unit meta; LIST_HEAD(PathSpec, specs); @@ -67,12 +63,12 @@ struct Path { RateLimit trigger_limit; sd_event_source *trigger_notify_event_source; -}; +} Path; -struct ActivationDetailsPath { +typedef struct ActivationDetailsPath { ActivationDetails meta; char *trigger_path_filename; -}; +} ActivationDetailsPath; void path_free_specs(Path *p); diff --git a/src/core/scope.c b/src/core/scope.c index 208716ea074..caeadd7e232 100644 --- a/src/core/scope.c +++ b/src/core/scope.c @@ -10,6 +10,7 @@ #include "exit-status.h" #include "load-dropin.h" #include "log.h" +#include "manager.h" #include "process-util.h" #include "random-util.h" #include "scope.h" diff --git a/src/core/scope.h b/src/core/scope.h index 1090431c13e..27f2c83b232 100644 --- a/src/core/scope.h +++ b/src/core/scope.h @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Scope Scope; - #include "cgroup.h" #include "kill.h" #include "unit.h" @@ -16,7 +14,7 @@ typedef enum ScopeResult { _SCOPE_RESULT_INVALID = -EINVAL, } ScopeResult; -struct Scope { +typedef struct Scope { Unit meta; CGroupContext cgroup_context; @@ -41,7 +39,7 @@ struct Scope { char *group; OOMPolicy oom_policy; -}; +} Scope; extern const UnitVTable scope_vtable; diff --git a/src/core/service.h b/src/core/service.h index 68be9075c12..a542c0fb111 100644 --- a/src/core/service.h +++ b/src/core/service.h @@ -1,12 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Service Service; -typedef struct ServiceFDStore ServiceFDStore; -typedef struct ServiceExtraFD ServiceExtraFD; - #include "exit-status.h" #include "kill.h" +#include "manager.h" #include "open-file.h" #include "path.h" #include "pidref.h" @@ -14,6 +11,8 @@ typedef struct ServiceExtraFD ServiceExtraFD; #include "socket.h" #include "unit.h" +typedef struct Service Service; + typedef enum ServiceRestart { SERVICE_RESTART_NO, SERVICE_RESTART_ON_SUCCESS, @@ -101,7 +100,7 @@ typedef enum ServiceRestartMode { _SERVICE_RESTART_MODE_INVALID = -EINVAL, } ServiceRestartMode; -struct ServiceFDStore { +typedef struct ServiceFDStore { Service *service; int fd; @@ -109,13 +108,13 @@ struct ServiceFDStore { sd_event_source *event_source; bool do_poll; - LIST_FIELDS(ServiceFDStore, fd_store); -}; + LIST_FIELDS(struct ServiceFDStore, fd_store); +} ServiceFDStore; -struct ServiceExtraFD { +typedef struct ServiceExtraFD { int fd; char *fdname; -}; +} ServiceExtraFD; struct Service { Unit meta; diff --git a/src/core/slice.c b/src/core/slice.c index ba6f2fb9c55..4a9ff98ee94 100644 --- a/src/core/slice.c +++ b/src/core/slice.c @@ -7,6 +7,7 @@ #include "dbus-unit.h" #include "fd-util.h" #include "log.h" +#include "manager.h" #include "serialize.h" #include "slice.h" #include "special.h" diff --git a/src/core/slice.h b/src/core/slice.h index 37e1f700f8f..46faecc0307 100644 --- a/src/core/slice.h +++ b/src/core/slice.h @@ -3,9 +3,7 @@ #include "unit.h" -typedef struct Slice Slice; - -struct Slice { +typedef struct Slice { Unit meta; SliceState state, deserialized_state; @@ -16,7 +14,7 @@ struct Slice { CGroupContext cgroup_context; CGroupRuntime *cgroup_runtime; -}; +} Slice; extern const UnitVTable slice_vtable; diff --git a/src/core/socket.c b/src/core/socket.c index 861aaba3d44..bb1db8e90ea 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -28,6 +28,7 @@ #include "ip-protocol-list.h" #include "label-util.h" #include "log.h" +#include "manager.h" #include "mkdir-label.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/core/socket.h b/src/core/socket.h index 51fc96280b9..240a9ac9658 100644 --- a/src/core/socket.h +++ b/src/core/socket.h @@ -1,14 +1,13 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Socket Socket; -typedef struct SocketPeer SocketPeer; - -#include "mount.h" #include "pidref.h" #include "socket-util.h" #include "unit.h" +typedef struct Socket Socket; +typedef struct SocketPeer SocketPeer; + typedef enum SocketExecCommand { SOCKET_EXEC_START_PRE, SOCKET_EXEC_START_CHOWN, diff --git a/src/core/swap.c b/src/core/swap.c index cc5a21ee780..a8549699ffe 100644 --- a/src/core/swap.c +++ b/src/core/swap.c @@ -17,6 +17,7 @@ #include "fd-util.h" #include "format-util.h" #include "fstab-util.h" +#include "manager.h" #include "parse-util.h" #include "path-util.h" #include "process-util.h" diff --git a/src/core/swap.h b/src/core/swap.h index d9bbd377f0e..fce7ea5e56a 100644 --- a/src/core/swap.h +++ b/src/core/swap.h @@ -10,8 +10,6 @@ #include "pidref.h" #include "unit.h" -typedef struct Swap Swap; - typedef enum SwapExecCommand { SWAP_EXEC_ACTIVATE, SWAP_EXEC_DEACTIVATE, @@ -38,7 +36,7 @@ typedef struct SwapParameters { bool priority_set; } SwapParameters; -struct Swap { +typedef struct Swap { Unit meta; char *what; @@ -85,7 +83,7 @@ struct Swap { devices for the same swap. We chain them up here. */ LIST_FIELDS(struct Swap, same_devnode); -}; +} Swap; extern const UnitVTable swap_vtable; diff --git a/src/core/target.h b/src/core/target.h index bb909d664f2..9e7c77c027e 100644 --- a/src/core/target.h +++ b/src/core/target.h @@ -3,13 +3,11 @@ #include "unit.h" -typedef struct Target Target; - -struct Target { +typedef struct Target { Unit meta; TargetState state, deserialized_state; -}; +} Target; extern const UnitVTable target_vtable; diff --git a/src/core/timer.c b/src/core/timer.c index b37a67f3107..d69e2299229 100644 --- a/src/core/timer.c +++ b/src/core/timer.c @@ -12,6 +12,7 @@ #include "dbus-timer.h" #include "dbus-unit.h" #include "fs-util.h" +#include "manager.h" #include "parse-util.h" #include "random-util.h" #include "serialize.h" diff --git a/src/core/timer.h b/src/core/timer.h index 14a9931dffe..90f19a7cf4e 100644 --- a/src/core/timer.h +++ b/src/core/timer.h @@ -1,9 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Timer Timer; -typedef struct ActivationDetailsTimer ActivationDetailsTimer; - #include "calendarspec.h" #include "unit.h" @@ -37,7 +34,7 @@ typedef enum TimerResult { _TIMER_RESULT_INVALID = -EINVAL, } TimerResult; -struct Timer { +typedef struct Timer { Unit meta; usec_t accuracy_usec; @@ -64,12 +61,12 @@ struct Timer { bool defer_reactivation; char *stamp_path; -}; +} Timer; -struct ActivationDetailsTimer { +typedef struct ActivationDetailsTimer { ActivationDetails meta; dual_timestamp last_trigger; -}; +} ActivationDetailsTimer; #define TIMER_MONOTONIC_CLOCK(t) ((t)->wake_system ? CLOCK_BOOTTIME_ALARM : CLOCK_MONOTONIC) diff --git a/src/core/transaction.c b/src/core/transaction.c index 07fd612d918..6d0d7e73bef 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -8,6 +8,7 @@ #include "bus-common-errors.h" #include "bus-error.h" #include "dbus-unit.h" +#include "manager.h" #include "slice.h" #include "strv.h" #include "terminal-util.h" diff --git a/src/core/transaction.h b/src/core/transaction.h index b6728a35d7b..1f58fcebccf 100644 --- a/src/core/transaction.h +++ b/src/core/transaction.h @@ -1,20 +1,15 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Transaction Transaction; -typedef enum TransactionAddFlags TransactionAddFlags; - #include "hashmap.h" #include "job.h" -#include "manager.h" -#include "unit.h" -struct Transaction { +typedef struct Transaction { /* Jobs to be added */ Hashmap *jobs; /* Unit object => Job object list 1:1 */ Job *anchor_job; /* The job the user asked for */ bool irreversible; -}; +} Transaction; Transaction* transaction_new(bool irreversible); Transaction* transaction_free(Transaction *tr); diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c index f25e2e39861..0bdacfc3c08 100644 --- a/src/core/unit-printf.c +++ b/src/core/unit-printf.c @@ -4,6 +4,7 @@ #include "cgroup-util.h" #include "format-util.h" #include "macro.h" +#include "manager.h" #include "sd-path.h" #include "specifier.h" #include "string-util.h" diff --git a/src/core/unit-serialize.c b/src/core/unit-serialize.c index 13aea615dd6..a38b38590a8 100644 --- a/src/core/unit-serialize.c +++ b/src/core/unit-serialize.c @@ -10,6 +10,7 @@ #include "parse-util.h" #include "serialize.h" #include "string-table.h" +#include "unit.h" #include "unit-serialize.h" #include "user-util.h" diff --git a/src/core/unit-serialize.h b/src/core/unit-serialize.h index ab8a8e3be90..a7ac03cf823 100644 --- a/src/core/unit-serialize.h +++ b/src/core/unit-serialize.h @@ -1,11 +1,13 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include #include -#include "unit.h" #include "fdset.h" +typedef struct Unit Unit; + /* These functions serialize state for our own usage, i.e.: across a reload/reexec, rather than for being * passed to a child process. */ diff --git a/src/core/unit.c b/src/core/unit.c index c25777671df..db142976227 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -24,6 +24,7 @@ #include "dbus-unit.h" #include "dbus.h" #include "dropin.h" +#include "dynamic-user.h" #include "env-util.h" #include "escape.h" #include "exec-credential.h" @@ -6810,6 +6811,14 @@ static const char* const unit_mount_dependency_type_table[_UNIT_MOUNT_DEPENDENCY DEFINE_STRING_TABLE_LOOKUP(unit_mount_dependency_type, UnitMountDependencyType); +static const char* const oom_policy_table[_OOM_POLICY_MAX] = { + [OOM_CONTINUE] = "continue", + [OOM_STOP] = "stop", + [OOM_KILL] = "kill", +}; + +DEFINE_STRING_TABLE_LOOKUP(oom_policy, OOMPolicy); + UnitDependency unit_mount_dependency_type_to_dependency_type(UnitMountDependencyType t) { switch (t) { diff --git a/src/core/unit.h b/src/core/unit.h index 6a46cbda0a2..5bf52f5f6d2 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -9,26 +9,28 @@ #include "sd-id128.h" -/* Circular dependency with manager.h, needs to be defined before local includes */ -typedef enum UnitMountDependencyType { - UNIT_MOUNT_WANTS, - UNIT_MOUNT_REQUIRES, - _UNIT_MOUNT_DEPENDENCY_TYPE_MAX, - _UNIT_MOUNT_DEPENDENCY_TYPE_INVALID = -EINVAL, -} UnitMountDependencyType; - #include "cgroup.h" #include "condition.h" #include "emergency-action.h" +#include "execute.h" #include "install.h" +#include "job.h" #include "list.h" #include "log-context.h" #include "mount-util.h" #include "pidref.h" +#include "ratelimit.h" #include "unit-file.h" typedef struct UnitRef UnitRef; +typedef enum UnitMountDependencyType { + UNIT_MOUNT_WANTS, + UNIT_MOUNT_REQUIRES, + _UNIT_MOUNT_DEPENDENCY_TYPE_MAX, + _UNIT_MOUNT_DEPENDENCY_TYPE_INVALID = -EINVAL, +} UnitMountDependencyType; + typedef enum KillOperation { KILL_TERMINATE, KILL_TERMINATE_AND_LOG, @@ -46,6 +48,21 @@ typedef enum CollectMode { _COLLECT_MODE_INVALID = -EINVAL, } CollectMode; +typedef enum OOMPolicy { + OOM_CONTINUE, /* The kernel or systemd-oomd kills the process it wants to kill, and that's it */ + OOM_STOP, /* The kernel or systemd-oomd kills the process it wants to kill, and we stop the unit */ + OOM_KILL, /* The kernel or systemd-oomd kills the process it wants to kill, and all others in the unit, and we stop the unit */ + _OOM_POLICY_MAX, + _OOM_POLICY_INVALID = -EINVAL, +} OOMPolicy; + +typedef enum StatusType { + STATUS_TYPE_EPHEMERAL, + STATUS_TYPE_NORMAL, + STATUS_TYPE_NOTICE, + STATUS_TYPE_EMERGENCY, +} StatusType; + static inline bool UNIT_IS_ACTIVE_OR_RELOADING(UnitActiveState t) { return IN_SET(t, UNIT_ACTIVE, UNIT_RELOADING, UNIT_REFRESHING); } @@ -200,8 +217,6 @@ static inline void* UNIT_DEPENDENCY_TO_PTR(UnitDependency d) { return INT_TO_PTR(d); } -#include "job.h" - struct UnitRef { /* Keeps tracks of references to a unit. This is useful so * that we can merge two units if necessary and correct all @@ -1061,6 +1076,9 @@ UnitMountDependencyType unit_mount_dependency_type_from_string(const char *s) _c const char* unit_mount_dependency_type_to_string(UnitMountDependencyType t) _const_; UnitDependency unit_mount_dependency_type_to_dependency_type(UnitMountDependencyType t) _pure_; +const char* oom_policy_to_string(OOMPolicy i) _const_; +OOMPolicy oom_policy_from_string(const char *s) _pure_; + /* Macros which append UNIT= or USER_UNIT= to the message */ #define log_unit_full_errno_zerook(unit, level, error, ...) \