From c0bfc1752df3530570a24c930220b94a4e3afabb Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Sat, 25 Mar 2017 18:48:30 +0100 Subject: lib, ipcpd: Fix bugs in ro sets This fixes several bugs in the ro sets, rib. And it fixes several bugs in the graph and routing component of the normal IPCP. --- src/lib/rib.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/lib/rib.c') diff --git a/src/lib/rib.c b/src/lib/rib.c index 8468e88c..fc58f266 100644 --- a/src/lib/rib.c +++ b/src/lib/rib.c @@ -177,6 +177,8 @@ static struct revent * revent_dup(struct revent * ev) re->flags = ev->flags; + list_head_init(&re->next); + return re; } @@ -196,7 +198,13 @@ static void rnode_notify_subs(struct rnode * node, struct rn_sub * s = list_entry(p, struct rn_sub, next); if (s->flags & ev->flags) { struct revent * e = revent_dup(ev); + if (e == NULL) + continue; + + pthread_mutex_lock(&s->sub->lock); list_add_tail(&e->next, &s->sub->events); + pthread_cond_signal(&s->sub->cond); + pthread_mutex_unlock(&s->sub->lock); } if (ev->flags & RO_DELETE) @@ -1130,7 +1138,7 @@ int rib_event_wait(ro_set_t * set, while (list_is_empty(&sub->events) && ret != -ETIMEDOUT) { if (timeout != NULL) - ret = -pthread_cond_timedwait(&sub->cond , + ret = -pthread_cond_timedwait(&sub->cond, &sub->lock, &abstime); else -- cgit v1.2.3