diff options
Diffstat (limited to 'src/core/socket.c')
-rw-r--r-- | src/core/socket.c | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/src/core/socket.c b/src/core/socket.c index c0f4030302..7e3630ada7 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ /*** This file is part of systemd. @@ -250,7 +251,7 @@ int socket_instantiate_service(Socket *s) { unit_ref_set(&s->service, u); - return unit_add_two_dependencies(UNIT(s), UNIT_BEFORE, UNIT_TRIGGERS, u, false); + return unit_add_two_dependencies(UNIT(s), UNIT_BEFORE, UNIT_TRIGGERS, u, false, UNIT_DEPENDENCY_IMPLICIT); } static bool have_non_accept_socket(Socket *s) { @@ -273,7 +274,7 @@ static bool have_non_accept_socket(Socket *s) { return false; } -static int socket_add_mount_links(Socket *s) { +static int socket_add_mount_dependencies(Socket *s) { SocketPort *p; int r; @@ -290,7 +291,7 @@ static int socket_add_mount_links(Socket *s) { if (!path) continue; - r = unit_require_mounts_for(UNIT(s), path); + r = unit_require_mounts_for(UNIT(s), path, UNIT_DEPENDENCY_FILE); if (r < 0) return r; } @@ -298,7 +299,7 @@ static int socket_add_mount_links(Socket *s) { return 0; } -static int socket_add_device_link(Socket *s) { +static int socket_add_device_dependencies(Socket *s) { char *t; assert(s); @@ -307,7 +308,7 @@ static int socket_add_device_link(Socket *s) { return 0; t = strjoina("/sys/subsystem/net/devices/", s->bind_to_device); - return unit_add_node_link(UNIT(s), t, false, UNIT_BINDS_TO); + return unit_add_node_dependency(UNIT(s), t, false, UNIT_BINDS_TO, UNIT_DEPENDENCY_FILE); } static int socket_add_default_dependencies(Socket *s) { @@ -317,17 +318,17 @@ static int socket_add_default_dependencies(Socket *s) { if (!UNIT(s)->default_dependencies) return 0; - r = unit_add_dependency_by_name(UNIT(s), UNIT_BEFORE, SPECIAL_SOCKETS_TARGET, NULL, true); + r = unit_add_dependency_by_name(UNIT(s), UNIT_BEFORE, SPECIAL_SOCKETS_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT); if (r < 0) return r; if (MANAGER_IS_SYSTEM(UNIT(s)->manager)) { - r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true); + r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT); if (r < 0) return r; } - return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true); + return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT); } _pure_ static bool socket_has_exec(Socket *s) { @@ -378,16 +379,16 @@ static int socket_add_extras(Socket *s) { unit_ref_set(&s->service, x); } - r = unit_add_two_dependencies(u, UNIT_BEFORE, UNIT_TRIGGERS, UNIT_DEREF(s->service), true); + r = unit_add_two_dependencies(u, UNIT_BEFORE, UNIT_TRIGGERS, UNIT_DEREF(s->service), true, UNIT_DEPENDENCY_IMPLICIT); if (r < 0) return r; } - r = socket_add_mount_links(s); + r = socket_add_mount_dependencies(s); if (r < 0) return r; - r = socket_add_device_link(s); + r = socket_add_device_dependencies(s); if (r < 0) return r; @@ -1864,31 +1865,21 @@ static int socket_coldplug(Unit *u) { } static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) { - pid_t pid; - int r; + ExecParameters exec_params = { .flags = EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN, .stdin_fd = -1, .stdout_fd = -1, .stderr_fd = -1, }; + pid_t pid; + int r; assert(s); assert(c); assert(_pid); - (void) unit_realize_cgroup(UNIT(s)); - if (s->reset_accounting) { - (void) unit_reset_cpu_accounting(UNIT(s)); - (void) unit_reset_ip_accounting(UNIT(s)); - s->reset_accounting = false; - } - - r = unit_setup_exec_runtime(UNIT(s)); - if (r < 0) - return r; - - r = unit_setup_dynamic_creds(UNIT(s)); + r = unit_prepare_exec(UNIT(s)); if (r < 0) return r; @@ -2196,6 +2187,9 @@ static void socket_enter_start_pre(Socket *s) { assert(s); socket_unwatch_control_pid(s); + + unit_warn_leftover_processes(UNIT(s)); + s->control_command_id = SOCKET_EXEC_START_PRE; s->control_command = s->exec_command[SOCKET_EXEC_START_PRE]; @@ -2261,13 +2255,14 @@ static void socket_enter_running(Socket *s, int cfd) { } if (cfd < 0) { - Iterator i; - Unit *other; bool pending = false; + Unit *other; + Iterator i; + void *v; /* If there's already a start pending don't bother to * do anything */ - SET_FOREACH(other, UNIT(s)->dependencies[UNIT_TRIGGERS], i) + HASHMAP_FOREACH_KEY(v, other, UNIT(s)->dependencies[UNIT_TRIGGERS], i) if (unit_active_or_pending(other)) { pending = true; break; @@ -2467,7 +2462,8 @@ static int socket_start(Unit *u) { return r; s->result = SOCKET_SUCCESS; - s->reset_accounting = true; + + u->reset_accounting = true; socket_enter_start_pre(s); return 1; @@ -2762,7 +2758,7 @@ const char* socket_port_type_to_string(SocketPort *p) { if (socket_address_family(&p->address) == AF_NETLINK) return "Netlink"; - /* fall through */ + _fallthrough_; default: return NULL; } |