On 27/09/2016 17:34, Lebleu Pierre wrote:
> Hi all,
> 
> I found a bug in the daemon process management. Indeed, when we have several 
> instances of one daemon such as "dnsmasq" and we want to restart only one 
> instance, the other instance is killed by procd. It seems procd updates the 
> second instance and then, kill it.
> 
> Please find the patch :
> diff --git a/service/service.c b/service/service.c
> index 0796adb..9ed07da 100644
> --- a/service/service.c
> +++ b/service/service.c
> @@ -132,8 +132,6 @@ service_update(struct service *s, struct blob_attr **tb, 
> bool add)
>         }
> 
>         if (tb[SERVICE_SET_INSTANCES]) {
> -               if (!add)
> -                       vlist_update(&s->instances);
>                 blobmsg_for_each_attr(cur, tb[SERVICE_SET_INSTANCES], rem) {
>                         service_instance_add(s, cur);
>                 }

this bit is certainly not correct. it simply deactivates the feature for
all services. the actual problem is that procd stores the instances
inside a vlist. this has an update mechanism triggered inside
service_instance_update().

what you want to do is compare in_o and in_n and only trigger
instance_update() if there really was a change. if there is no change
then simply migrate the pid over to the new instance.


> @@ -238,7 +236,7 @@ service_handle_set(struct ubus_context *ctx, struct 
> ubus_object *obj,
>         int ret;
> 
>         blobmsg_parse(service_set_attrs, __SERVICE_SET_MAX, tb, 
> blob_data(msg), blob_len(msg));
> -       cur = tb[SERVICE_ATTR_NAME];
> +       cur = tb[SERVICE_SET_NAME];
>         if (!cur)
>                 return UBUS_STATUS_INVALID_ARGUMENT;

this is a copy paste error but luckily does not cause an error as SET
and ATTR both eval to 0. i have merged this part as a fix.

        John


> 
> 
> Regards,
> 
> Pierre
> 
> 
> _______________________________________________
> Lede-dev mailing list
> Lede-dev@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev
> 

_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to