On Mon, Sep 21, 2015 at 06:25:39PM +0530, Pradeep Jindal wrote:
> I will give you more info in a while. I did some debugging,
> "peers->sync_task = NULL;" seems to be the culprit here, First,
> peers->sync_task is being set to NULL and then being deleted & freed which
> I think would obviously fail. I moved "peers->sync_task = NULL;" to after
> task_free call in the code below and it works as expected now. Let me know
> if this makes sense.
> 
> ==== peers.c ====
> static struct task *process_peer_sync(struct task * task)
> {
>         struct peers *peers = (struct peers *)task->context;
>         struct peer *ps;
>         struct shared_table *st;
> 
>         task->expire = TICK_ETERNITY;
> 
>         if (!peers->peers_fe) {
>                 /* this one was never started, kill it */
>                 signal_unregister_handler(peers->sighandler);
>                 peers->sync_task = NULL;
>                 task_delete(peers->sync_task);
>                 task_free(peers->sync_task);
>                 return NULL;
>         }
> ==== peers.c ====

Absolutely! This is definitely a bug. CCing Emeric who may have an idea
when this may happen.

Thanks,
Willy


Reply via email to