diff --git a/dp-core/vr_flow.c b/dp-core/vr_flow.c index 15c2a6db7..c296a19d5 100644 --- a/dp-core/vr_flow.c +++ b/dp-core/vr_flow.c @@ -109,7 +109,7 @@ vr_valid_link_local_port(struct vrouter *router, int family, if (proto == VR_IP_PROTO_UDP) tmp += (router->vr_link_local_ports_size * 8 / 2); - data = router->vr_link_local_ports[(tmp /8)]; + data = router->vr_link_local_ports[(tmp / 8)]; if (data & (1 << (tmp % 8))) return true; @@ -120,7 +120,6 @@ static void vr_clear_link_local_port(struct vrouter *router, int family, int proto, int port) { - unsigned char *data; unsigned int tmp; @@ -138,15 +137,16 @@ vr_clear_link_local_port(struct vrouter *router, int family, if (proto == VR_IP_PROTO_UDP) tmp += (router->vr_link_local_ports_size * 8 / 2); - data = &router->vr_link_local_ports[(tmp /8)]; + data = &router->vr_link_local_ports[(tmp / 8)]; *data &= (~(1 << (tmp % 8))); + + return; } static void vr_set_link_local_port(struct vrouter *router, int family, int proto, int port) { - unsigned char *data; unsigned int tmp; @@ -164,8 +164,10 @@ vr_set_link_local_port(struct vrouter *router, int family, if (proto == VR_IP_PROTO_UDP) tmp += (router->vr_link_local_ports_size * 8 / 2); - data = &router->vr_link_local_ports[tmp /8]; + data = &router->vr_link_local_ports[tmp / 8]; *data |= (1 << (tmp % 8)); + + return; } static void @@ -203,7 +205,11 @@ vr_reset_flow_entry(struct vrouter *router, struct vr_flow_entry *fe, unsigned int index) { memset(&fe->fe_stats, 0, sizeof(fe->fe_stats)); - memset(&fe->fe_hold_list, 0, sizeof(fe->fe_hold_list));; + if (fe->fe_hold_list) { + vr_printf("vrouter: Potential memory leak @ %s:%d\n", + __FILE__, __LINE__); + } + fe->fe_hold_list = NULL; fe->fe_key.flow_key_len = 0; fe->fe_type = VP_TYPE_NULL; memset(&fe->fe_key, 0, sizeof(fe->fe_key)); @@ -328,6 +334,7 @@ vr_flow_queue_free_defer(struct vr_flow_md *flmd, struct vr_flow_queue *vfq) vdd->vdd_data = (void *)vfq; vr_defer(flmd->flmd_router, vr_flow_queue_free, (void *)vdd); + flmd->flmd_defer_data = NULL; return; } @@ -1127,6 +1134,11 @@ vr_flow_flush(void *arg) } exit_flush: + if (flmd->flmd_defer_data) { + vr_put_defer_data(flmd->flmd_defer_data); + flmd->flmd_defer_data = NULL; + } + vr_free(flmd, VR_FLOW_METADATA_OBJECT); return; @@ -1757,6 +1769,8 @@ vr_link_local_ports_reset(struct vrouter *router) memset(router->vr_link_local_ports, 0, router->vr_link_local_ports_size); } + + return; } static void @@ -1767,6 +1781,8 @@ vr_link_local_ports_exit(struct vrouter *router) router->vr_link_local_ports = NULL; router->vr_link_local_ports_size = 0; } + + return; } static int