X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsocket.c;h=d0568c9b52074bdb18888f56e8b39283dbf24023;hp=d76a81ff993b8aaeddc22a539c13176d6fac6733;hb=11ce3427242b8b4ddf638ed5703d69041d719b4c;hpb=e51bc1a23e8f581e4fe46aa4df1bd93b7042c184 diff --git a/src/socket.c b/src/socket.c index d76a81ff9..d0568c9b5 100644 --- a/src/socket.c +++ b/src/socket.c @@ -1,4 +1,4 @@ -/*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /*** This file is part of systemd. @@ -659,7 +659,6 @@ static int fifo_address_create( const char *path, mode_t directory_mode, mode_t socket_mode, - const char *label, int *_fd) { int fd = -1, r = 0; @@ -671,7 +670,7 @@ static int fifo_address_create( mkdir_parents(path, directory_mode); - if ((r = label_fifofile_set(label, path)) < 0) + if ((r = label_fifofile_set(path)) < 0) goto fail; /* Enforce the right access mode for the fifo */ @@ -725,15 +724,10 @@ static int socket_open_fds(Socket *s) { SocketPort *p; int r; char *label = NULL; + bool know_label = false; assert(s); - if ((r = socket_instantiate_service(s)) < 0) - return r; - - if ((r = label_get_socket_label_from_exe(s->service->exec_command[SERVICE_EXEC_START]->path, &label)) < 0) - return r; - LIST_FOREACH(port, p, s->ports) { if (p->fd >= 0) @@ -741,6 +735,17 @@ static int socket_open_fds(Socket *s) { if (p->type == SOCKET_SOCKET) { + if (!know_label) { + + if ((r = socket_instantiate_service(s)) < 0) + return r; + + if ((r = label_get_socket_label_from_exe(s->service->exec_command[SERVICE_EXEC_START]->path, &label)) < 0) + return r; + + know_label = true; + } + if ((r = socket_address_listen( &p->address, s->backlog, @@ -761,7 +766,6 @@ static int socket_open_fds(Socket *s) { p->path, s->directory_mode, s->socket_mode, - label, &p->fd)) < 0) goto rollback; @@ -1217,6 +1221,9 @@ static void socket_enter_running(Socket *s, int cfd) { if ((r = manager_add_job(s->meta.manager, JOB_START, UNIT(service), JOB_REPLACE, true, &error, NULL)) < 0) goto fail; + + /* Notify clients about changed counters */ + unit_add_to_dbus_queue(UNIT(s)); } return; @@ -1594,6 +1601,9 @@ static void socket_sigchld_event(Unit *u, pid_t pid, int code, int status) { assert_not_reached("Uh, control process died at wrong time."); } } + + /* Notify clients about changed exit status */ + unit_add_to_dbus_queue(u); } static void socket_timer_event(Unit *u, uint64_t elapsed, Watch *w) { @@ -1774,5 +1784,7 @@ const UnitVTable socket_vtable = { .reset_maintenance = socket_reset_maintenance, - .bus_message_handler = bus_socket_message_handler + .bus_interface = "org.freedesktop.systemd1.Socket", + .bus_message_handler = bus_socket_message_handler, + .bus_invalidating_properties = bus_socket_invalidating_properties };