From e841984a4e520efb7b6b47c24e85e01efde52822 Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Wed, 13 Dec 2017 17:35:00 +0100 Subject: [PATCH] service_step(): Fix problem with double start of service/run/tasks Make svc state transition to RUNNING *before* service_start(), because in that function we may call service_step() as well, which would start the svc again (since it was still in READY). Signed-off-by: Joachim Nilsson --- src/service.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/service.c b/src/service.c index c1b67430..25467dd7 100644 --- a/src/service.c +++ b/src/service.c @@ -888,16 +888,21 @@ restart: if (sm_is_in_teardown(&sm)) break; + /* + * Make state transition *before* service_start(), because + * of HOOK_SVC_START, which may call service_step() + */ + svc_mark_clean(svc); + svc_set_state(svc, SVC_RUNNING_STATE); + err = service_start(svc); if (err) { (*restart_cnt)++; + svc_set_state(svc, SVC_READY_STATE); if (!svc_is_inetd_conn(svc)) break; } - - svc_mark_clean(svc); - svc_set_state(svc, SVC_RUNNING_STATE); } break;