chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
shutdown: add link to root storage daemon text
[elogind.git]
/
src
/
log.c
diff --git
a/src/log.c
b/src/log.c
index 5c5b734f2f83c96a9bf7cb18cfdf89e630dbea0e..3dfe65432b2b5288f0723c75faabc7be50ce51fe 100644
(file)
--- a/
src/log.c
+++ b/
src/log.c
@@
-95,7
+95,8
@@
static int log_open_kmsg(void) {
if (kmsg_fd >= 0)
return 0;
if (kmsg_fd >= 0)
return 0;
- if ((kmsg_fd = open("/dev/kmsg", O_WRONLY|O_NOCTTY|O_CLOEXEC)) < 0) {
+ kmsg_fd = open("/dev/kmsg", O_WRONLY|O_NOCTTY|O_CLOEXEC);
+ if (kmsg_fd < 0) {
log_error("Failed to open /dev/kmsg for logging: %s", strerror(errno));
return -errno;
}
log_error("Failed to open /dev/kmsg for logging: %s", strerror(errno));
return -errno;
}
@@
-118,6
+119,9
@@
static int create_log_socket(int type) {
struct timeval tv;
int fd;
struct timeval tv;
int fd;
+ if (getpid() == 1)
+ /* systemd should not block on syslog */
+ type |= SOCK_NONBLOCK;
if ((fd = socket(AF_UNIX, type|SOCK_CLOEXEC, 0)) < 0)
return -errno;
if ((fd = socket(AF_UNIX, type|SOCK_CLOEXEC, 0)) < 0)
return -errno;
@@
-262,14
+266,16
@@
static int write_to_console(
if (console_fd < 0)
return 0;
if (console_fd < 0)
return 0;
- snprintf(location, sizeof(location), "(%s:%u) ", file, line);
- char_array_0(location);
-
highlight = LOG_PRI(level) <= LOG_ERR && show_color;
zero(iovec);
highlight = LOG_PRI(level) <= LOG_ERR && show_color;
zero(iovec);
- if (show_location)
+
+ if (show_location) {
+ snprintf(location, sizeof(location), "(%s:%u) ", file, line);
+ char_array_0(location);
IOVEC_SET_STRING(iovec[n++], location);
IOVEC_SET_STRING(iovec[n++], location);
+ }
+
if (highlight)
IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_ON);
IOVEC_SET_STRING(iovec[n++], buffer);
if (highlight)
IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_ON);
IOVEC_SET_STRING(iovec[n++], buffer);
@@
-330,7
+336,8
@@
static int write_to_syslog(
for (;;) {
ssize_t n;
for (;;) {
ssize_t n;
- if ((n = sendmsg(syslog_fd, &msghdr, MSG_NOSIGNAL)) < 0)
+ n = sendmsg(syslog_fd, &msghdr, MSG_NOSIGNAL);
+ if (n < 0)
return -errno;
if (!syslog_is_stream ||
return -errno;
if (!syslog_is_stream ||
@@
-407,8
+414,10
@@
static int log_dispatch(
log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
log_target == LOG_TARGET_SYSLOG) {
log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
log_target == LOG_TARGET_SYSLOG) {
- if ((k = write_to_syslog(level, file, line, func, buffer)) < 0) {
- log_close_syslog();
+ k = write_to_syslog(level, file, line, func, buffer);
+ if (k < 0) {
+ if (k != -EAGAIN)
+ log_close_syslog();
log_open_kmsg();
} else if (k > 0)
r++;
log_open_kmsg();
} else if (k > 0)
r++;
@@
-419,16
+428,19
@@
static int log_dispatch(
log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
log_target == LOG_TARGET_KMSG)) {
log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
log_target == LOG_TARGET_KMSG)) {
- if ((k = write_to_kmsg(level, file, line, func, buffer)) < 0) {
+ k = write_to_kmsg(level, file, line, func, buffer);
+ if (k < 0) {
log_close_kmsg();
log_open_console();
} else if (k > 0)
r++;
}
log_close_kmsg();
log_open_console();
} else if (k > 0)
r++;
}
- if (k <= 0 &&
- (k = write_to_console(level, file, line, func, buffer)) < 0)
- return k;
+ if (k <= 0) {
+ k = write_to_console(level, file, line, func, buffer);
+ if (k < 0)
+ return k;
+ }
buffer = e;
} while (buffer);
buffer = e;
} while (buffer);