}
static void on_plymouth_disconnect(Manager *m) {
- safe_close(m->plymouth_fd);
- m->plymouth_fd = -1;
+ m->plymouth_fd = safe_close(m->plymouth_fd);
m->plymouth_cancel_sent = false;
}
int r;
/* try to connect or reconnect if sending a message */
- if (m->plymouth_fd <= 0) {
- m->plymouth_fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
- if (m->plymouth_fd < 0) {
- return log_warning_errno(errno, "Connection to plymouth socket failed: %m");
- }
- if (connect(m->plymouth_fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + 1 + strlen(sa.un.sun_path+1)) < 0) {
- on_plymouth_disconnect(m);
- return log_warning_errno(errno, "Couldn't connect to plymouth: %m");
- }
- r = sd_event_add_io(m->event, NULL, m->plymouth_fd, EPOLLIN, plymouth_feedback_handler, m);
- if (r < 0) {
- on_plymouth_disconnect(m);
- return log_warning_errno(r, "Can't listen to plymouth socket: %m");
- }
+ if (m->plymouth_fd >= 0)
+ return 0;
+
+ m->plymouth_fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
+ if (m->plymouth_fd < 0)
+ return log_warning_errno(errno, "Connection to plymouth socket failed: %m");
+
+ if (connect(m->plymouth_fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + 1 + strlen(sa.un.sun_path+1)) < 0) {
+ on_plymouth_disconnect(m);
+ return log_warning_errno(errno, "Couldn't connect to plymouth: %m");
+ }
+
+ r = sd_event_add_io(m->event, NULL, m->plymouth_fd, EPOLLIN, plymouth_feedback_handler, m);
+ if (r < 0) {
+ on_plymouth_disconnect(m);
+ return log_warning_errno(r, "Can't listen to plymouth socket: %m");
}
return 0;
/* Initialize and list new clients */
new_client_fd = accept4(m->connection_fd, NULL, NULL, SOCK_CLOEXEC);
- if (new_client_fd > 0) {
- log_debug("New fsck client connected to fd: %d", new_client_fd);
- client = new0(Client, 1);
- if (!client)
- return log_oom();
- client->fd = new_client_fd;
- client->manager = m;
- LIST_PREPEND(clients, m->clients, client);
- r = sd_event_add_io(m->event, NULL, client->fd, EPOLLIN, progress_handler, client);
- if (r < 0) {
- remove_client(&(m->clients), client);
- return r;
- }
- /* only request the client to cancel now in case the request is dropped by the client (chance to recancel) */
- if (m->cancel_requested)
- request_cancel_client(client);
- } else
+ if (new_client_fd < 0)
return log_error_errno(errno, "Couldn't accept a new connection: %m");
+ log_debug("New fsck client connected to fd: %d", new_client_fd);
+
+ client = new0(Client, 1);
+ if (!client)
+ return log_oom();
+ client->fd = new_client_fd;
+ client->manager = m;
+ LIST_PREPEND(clients, m->clients, client);
+ r = sd_event_add_io(m->event, NULL, client->fd, EPOLLIN, progress_handler, client);
+ if (r < 0) {
+ remove_client(&(m->clients), client);
+ return r;
+ }
+ /* only request the client to cancel now in case the request is dropped by the client (chance to recancel) */
+ if (m->cancel_requested)
+ request_cancel_client(client);
+
return 0;
}
if (n > 1) {
log_error("Too many file descriptors received.");
return EXIT_FAILURE;
- } else if (n == 1) {
+ } else if (n == 1)
fd = SD_LISTEN_FDS_START + 0;
- } else {
+ else {
fd = make_socket_fd(LOG_DEBUG, FSCKD_SOCKET_PATH, SOCK_STREAM | SOCK_CLOEXEC);
if (fd < 0) {
- log_error_errno(r, "Couldn't create listening socket fd on %s: %m", FSCKD_SOCKET_PATH);
+ log_error_errno(fd, "Couldn't create listening socket fd on %s: %m", FSCKD_SOCKET_PATH);
return EXIT_FAILURE;
}
}