procd currently does not support deleting a stopped instance. The reason
is that we return in instance_stop(), if pending is set to false. This
patch adds a new function, instance_delete(), which does the necessary
clean-up of an instance. instance_delete() is called before we return in
instance_stop(), as well as when a process that should not be restarted
has exited in instance_exit().
Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
instance_start(in);
}
+static void
+instance_delete(struct service_instance *in)
+{
+ struct service *s = in->srv;
+
+ avl_delete(&s->instances.avl, &in->node.avl);
+ instance_free(in);
+ service_stopped(s);
+}
+
static void
instance_exit(struct uloop_process *p, int ret)
{
instance_removepid(in);
if (in->restart)
instance_start(in);
- else {
- struct service *s = in->srv;
-
- avl_delete(&s->instances.avl, &in->node.avl);
- instance_free(in);
- service_stopped(s);
- }
+ else
+ instance_delete(in);
} else if (in->restart) {
instance_start(in);
} else if (in->respawn) {
void
instance_stop(struct service_instance *in, bool halt)
{
- if (!in->proc.pending)
+ if (!in->proc.pending) {
+ if (halt)
+ instance_delete(in);
return;
+ }
in->halt = halt;
in->restart = in->respawn = false;
kill(in->proc.pid, SIGTERM);