X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=socket.c;h=88fb2d3869e50231a4cfd4a2b6974c091e352688;hp=91832128f5a9c9f83d8d8d517ac448976e9e488f;hb=ac86f50d7b62fb16b4521c87bd2739b9c26a4f60;hpb=4f2d528d3bb25cebf8d3ebe83d8193ab4016cb90 diff --git a/socket.c b/socket.c index 91832128f..88fb2d386 100644 --- a/socket.c +++ b/socket.c @@ -111,19 +111,12 @@ static void socket_init(Unit *u) { assert(u); assert(u->meta.load_state == UNIT_STUB); - s->state = 0; s->timer_watch.type = WATCH_INVALID; - s->bind_ipv6_only = false; s->backlog = SOMAXCONN; s->timeout_usec = DEFAULT_TIMEOUT_USEC; s->directory_mode = 0755; s->socket_mode = 0666; - s->kill_mode = 0; - s->failure = false; - s->control_pid = 0; - s->service = NULL; - s->accept = false; - s->n_accepted = 0; + exec_context_init(&s->exec_context); } @@ -899,13 +892,13 @@ static void socket_fd_event(Unit *u, int fd, uint32_t events, Watch *w) { int cfd = -1; assert(s); + assert(fd >= 0); log_debug("Incoming traffic on %s", u->meta.id); if (events != EPOLLIN) { log_error("Got invalid poll event on socket."); - socket_enter_stop_pre(s, false); - return; + goto fail; } if (w->data.socket_accept) { @@ -917,8 +910,7 @@ static void socket_fd_event(Unit *u, int fd, uint32_t events, Watch *w) { continue; log_error("Failed to accept socket: %m"); - socket_enter_stop_pre(s, false); - return; + goto fail; } break; @@ -926,6 +918,10 @@ static void socket_fd_event(Unit *u, int fd, uint32_t events, Watch *w) { } socket_enter_running(s, cfd); + return; + +fail: + socket_enter_stop_pre(s, false); } static void socket_sigchld_event(Unit *u, pid_t pid, int code, int status) {