X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsocket.c;h=00e0685aadec8476dc7b33aeb17b0d27a41afd55;hp=00fb568b02506817d1edd1be969e79a662c6323d;hb=e167fb86f6935c0fe989d6ccfbbc0acadba245a2;hpb=46925ac5a8fb5162a07aabe21536af500a49d3ae diff --git a/src/socket.c b/src/socket.c index 00fb568b0..00e0685aa 100644 --- a/src/socket.c +++ b/src/socket.c @@ -37,6 +37,7 @@ #include "unit-name.h" #include "dbus-socket.h" #include "missing.h" +#include "special.h" static const UnitActiveState state_translation_table[_SOCKET_STATE_MAX] = { [SOCKET_DEAD] = UNIT_INACTIVE, @@ -66,15 +67,10 @@ static void socket_init(Unit *u) { s->max_connections = 64; - s->keep_alive = false; s->priority = -1; - s->receive_buffer = 0; - s->send_buffer = 0; s->ip_tos = -1; s->ip_ttl = -1; - s->pipe_size = 0; s->mark = -1; - s->free_bind = false; exec_context_init(&s->exec_context); @@ -209,10 +205,7 @@ int socket_add_one_mount_link(Socket *s, Mount *m) { if (!socket_needs_mount(s, m->where)) return 0; - if ((r = unit_add_dependency(UNIT(m), UNIT_BEFORE, UNIT(s), true)) < 0) - return r; - - if ((r = unit_add_dependency(UNIT(s), UNIT_REQUIRES, UNIT(m), true)) < 0) + if ((r = unit_add_two_dependencies(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true)) < 0) return r; return 0; @@ -249,6 +242,17 @@ static int socket_add_device_link(Socket *s) { return r; } +static int socket_add_default_dependencies(Socket *s) { + int r; + assert(s); + + if (s->meta.manager->running_as == MANAGER_SYSTEM) + if ((r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true)) < 0) + return r; + + return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true); +} + static int socket_load(Unit *u) { Socket *s = SOCKET(u); int r; @@ -281,6 +285,10 @@ static int socket_load(Unit *u) { if ((r = unit_add_default_cgroup(u)) < 0) return r; + + if (s->meta.default_dependencies) + if ((r = socket_add_default_dependencies(s)) < 0) + return r; } return socket_verify(s); @@ -1389,7 +1397,7 @@ static void socket_sigchld_event(Unit *u, pid_t pid, int code, int status) { s->failure = s->failure || !success; if (s->control_command) - exec_status_fill(&s->control_command->exec_status, pid, code, status); + exec_status_exit(&s->control_command->exec_status, pid, code, status); log_debug("%s control process exited, code=%s status=%i", u->meta.id, sigchld_code_to_string(code), status);