diff --git a/dp-core/vr_flow.c b/dp-core/vr_flow.c index 5a10f2334..13f496a54 100644 --- a/dp-core/vr_flow.c +++ b/dp-core/vr_flow.c @@ -689,7 +689,9 @@ vr_flow_mark_evict(struct vrouter *router, struct vr_flow_entry *fe, /* no modification. hence...*/ rfe = NULL; } else { - if ((rfe->fe_rflow == index) || (rfe->fe_rflow < 0)) { + /* we do not want hold flows to be evicted, just yet */ + if (((rfe->fe_rflow == index) || (rfe->fe_rflow < 0)) && + (rfe->fe_action != VR_FLOW_ACTION_HOLD)) { evict_forward_flow = __vr_flow_mark_evict(router, rfe); } } diff --git a/dp-core/vrouter.c b/dp-core/vrouter.c index 7b832e7e0..32b412cd9 100644 --- a/dp-core/vrouter.c +++ b/dp-core/vrouter.c @@ -262,6 +262,8 @@ vrouter_ops_destroy(vrouter_ops *req) req->vo_build_info = NULL; } + vr_free(req, VR_VROUTER_REQ_OBJECT); + return; }