[systemd-devel] [PATCH] Fix timeout when stopping Type=notify service
Lennart Poettering
lennart at poettering.net
Mon Sep 30 20:08:10 PDT 2013
On Fri, 20.09.13 22:53, Olivier Brunel (jjk at jjacky.com) wrote:
> Since 41efeaec a call to service_unwatch_main_pid() is done from
> service_set_main_pid(), which is called upon receiving message MAINPID=
>
> This had the side effect of not watching pid anymore, and would result in a
> useless timeout when stopping the service, as the unit wouldn't be identified
> from the pid, so not marked stopped which would result in systemd thinking this
> was a timeout.
I commited a different fix now in
7400b9d2e99938d17b281d7df43680eade18666e, but it's untested. Could you
check if this makes things work?
> ---
> I'm not exactly familiar with systemd's internals, so this might not be the
> correct way to fix this, please correct me if it isn't.
>
> src/core/service.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/src/core/service.c b/src/core/service.c
> index 246a86e..1dccdff 100644
> --- a/src/core/service.c
> +++ b/src/core/service.c
> @@ -3388,9 +3388,17 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
> log_warning_unit(u->id,
> "Failed to parse notification message %s", e);
> else {
> + int r;
> +
> log_debug_unit(u->id,
> "%s: got %s", u->id, e);
> service_set_main_pid(s, pid);
> + r = unit_watch_pid(u, pid);
> + if (r < 0)
> + /* FIXME: we need to do something here */
> + log_warning_unit(u->id,
> + "Failed to watch PID %lu from service %s",
> + (unsigned long) pid, u->id);
> }
> }
>
Lennart
--
Lennart Poettering - Red Hat, Inc.
More information about the systemd-devel
mailing list