[OpenWrt-Devel] [PATCH] procd: instance: Support deleting stopped instances
Hans Dedecker
dedeckeh at gmail.com
Thu Apr 4 16:59:27 EDT 2019
On Wed, Mar 13, 2019 at 4:44 PM Kristian Evensen
<kristian.evensen at gmail.com> wrote:
>
> 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);
instance_delete should only be called when halt is set to true similar
as in instance_exit
Hans
> 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
_______________________________________________
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