[OpenWrt-Devel] [PATCH V2] procd: instance: Support deleting stopped instances
Kristian Evensen
kristian.evensen at gmail.com
Sat Apr 6 08:28:30 EDT 2019
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().
v1->v2:
- Only call instance_delete() in instance_stop() if halt is true (thanks
Hans Dedecker).
Signed-off-by: Kristian Evensen <kristian.evensen at gmail.com>
---
service/instance.c | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/service/instance.c b/service/instance.c
index a5742b7..3512f66 100644
--- a/service/instance.c
+++ b/service/instance.c
@@ -518,6 +518,16 @@ instance_timeout(struct uloop_timeout *t)
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)
{
@@ -539,13 +549,8 @@ 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) {
@@ -569,8 +574,11 @@ instance_exit(struct uloop_process *p, int ret)
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);
--
2.19.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list