[OpenWrt-Devel] [PATCH] procd: instance: Support deleting stopped instances

Kristian Evensen kristian.evensen at gmail.com
Wed Mar 13 11:43:59 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().

Signed-off-by: Kristian Evensen <kristian.evensen at gmail.com>
---
 service/instance.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/service/instance.c b/service/instance.c
index a5742b7..78ac540 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,10 @@ 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) {
+		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