chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
core: show timeouts when watchdog howls
[elogind.git]
/
src
/
core
/
service.c
diff --git
a/src/core/service.c
b/src/core/service.c
index 5c54a34bcdc7f3b98a4f1a90e6f195516bc5b01d..6a4665a1ae7ca560474e3661438498005bd519eb 100644
(file)
--- a/
src/core/service.c
+++ b/
src/core/service.c
@@
-1699,6
+1699,10
@@
static int service_start(Unit *u) {
s->main_pid_alien = false;
s->forbid_restart = false;
s->main_pid_alien = false;
s->forbid_restart = false;
+ free(s->status_text);
+ s->status_text = NULL;
+ s->status_errno = 0;
+
service_enter_start_pre(s);
return 0;
}
service_enter_start_pre(s);
return 0;
}
@@
-2547,11
+2551,15
@@
static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *us
static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
Service *s = SERVICE(userdata);
static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
Service *s = SERVICE(userdata);
+ char t[FORMAT_TIMESPAN_MAX];
assert(s);
assert(source == s->watchdog_event_source);
assert(s);
assert(source == s->watchdog_event_source);
- log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
+ log_error_unit(UNIT(s)->id,
+ "%s watchdog timeout (limit %s)!",
+ UNIT(s)->id,
+ format_timespan(t, sizeof(t), s->watchdog_usec, 1));
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
return 0;
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
return 0;
@@
-2637,7
+2645,7
@@
static void service_notify_message(Unit *u, pid_t pid, char **tags) {
if (e) {
int status_errno;
if (e) {
int status_errno;
- if (safe_atoi(e + 6, &status_errno) < 0)
+ if (safe_atoi(e + 6, &status_errno) < 0
|| status_errno < 0
)
log_warning_unit(u->id, "Failed to parse ERRNO= field in notification message: %s", e);
else {
log_debug_unit(u->id, "%s: got %s", u->id, e);
log_warning_unit(u->id, "Failed to parse ERRNO= field in notification message: %s", e);
else {
log_debug_unit(u->id, "%s: got %s", u->id, e);