***/
#include <sys/socket.h>
-#include <sys/poll.h>
-#include <sys/types.h>
+#include <poll.h>
#include <sys/timerfd.h>
-#include <assert.h>
-#include <string.h>
#include <errno.h>
#include <unistd.h>
-#include <fcntl.h>
#include <stddef.h>
#include "systemd/sd-daemon.h"
assert(_b);
n = recvmsg(fd, &msghdr, MSG_DONTWAIT);
- if (n <= 0) {
- if (n == 0) {
- log_error("Short read");
- return -EIO;
- }
-
+ if (n < 0) {
if (errno == EAGAIN || errno == EINTR)
return 0;
- log_error("recvmsg(): %m");
+ log_error_errno(errno, "recvmsg(): %m");
return -errno;
}
+ cmsg_close_all(&msghdr);
+
+ if (n == 0) {
+ log_error("Short read");
+ return -EIO;
+ }
+
if (msghdr.msg_controllen < CMSG_LEN(sizeof(struct ucred)) ||
control.cmsghdr.cmsg_level != SOL_SOCKET ||
control.cmsghdr.cmsg_type != SCM_CREDENTIALS ||
fflush(f);
if (ferror(f) || rename(temp_path, "/run/systemd/shutdown/scheduled") < 0) {
- log_error("Failed to write information about scheduled shutdowns: %m");
+ log_error_errno(errno, "Failed to write information about scheduled shutdowns: %m");
r = -errno;
unlink(temp_path);
pollfd[i].events = POLLIN;
pollfd[i].fd = timerfd_create(CLOCK_REALTIME, TFD_NONBLOCK|TFD_CLOEXEC);
if (pollfd[i].fd < 0) {
- log_error("timerfd_create(): %m");
+ log_error_errno(errno, "timerfd_create(): %m");
goto finish;
}
}
if (errno == EAGAIN || errno == EINTR)
continue;
- log_error("poll(): %m");
+ log_error_errno(errno, "poll(): %m");
goto finish;
}
warn_wall(n, &b.command);
}
if (timerfd_settime(pollfd[FD_WALL_TIMER].fd, TFD_TIMER_ABSTIME, &its, NULL) < 0) {
- log_error("timerfd_settime(): %m");
+ log_error_errno(errno, "timerfd_settime(): %m");
goto finish;
}
zero(its);
timespec_store(&its.it_value, when_nologin(b.command.usec));
if (timerfd_settime(pollfd[FD_NOLOGIN_TIMER].fd, TFD_TIMER_ABSTIME, &its, NULL) < 0) {
- log_error("timerfd_settime(): %m");
+ log_error_errno(errno, "timerfd_settime(): %m");
goto finish;
}
zero(its);
timespec_store(&its.it_value, b.command.usec);
if (timerfd_settime(pollfd[FD_SHUTDOWN_TIMER].fd, TFD_TIMER_ABSTIME, &its, NULL) < 0) {
- log_error("timerfd_settime(): %m");
+ log_error_errno(errno, "timerfd_settime(): %m");
goto finish;
}
/* Restart timer */
timespec_store(&its.it_value, when_wall(n, b.command.usec));
if (timerfd_settime(pollfd[FD_WALL_TIMER].fd, TFD_TIMER_ABSTIME, &its, NULL) < 0) {
- log_error("timerfd_settime(): %m");
+ log_error_errno(errno, "timerfd_settime(): %m");
goto finish;
}
}
(b.command.warn_wall ? NULL : "--no-wall"),
NULL);
- log_error("Failed to execute /sbin/shutdown: %m");
+ log_error_errno(errno, "Failed to execute /sbin/shutdown: %m");
}
sd_notify(false,