[ovs-dev] [minor fixes 1/6] ofproto: Avoid memory leak in classifier on destruction.

Ethan Jackson ethan at nicira.com
Mon Apr 18 17:56:18 UTC 2011


Looks Good.

Ethan

On Mon, Apr 11, 2011 at 11:01 AM, Ben Pfaff <blp at nicira.com> wrote:
> ofproto_flush_flows() flushes the flow table but then it reintroduces flows
> required by fail-open or in-band.  These are then leaked when the
> classifier is destroyed a little later.
>
> This fixes the problem by not reintroducing these flows when ofproto is
> being destroyed.
> ---
>  ofproto/ofproto.c |   13 ++++++++++---
>  1 files changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
> index 1865277..18853c8 100644
> --- a/ofproto/ofproto.c
> +++ b/ofproto/ofproto.c
> @@ -325,6 +325,7 @@ static const struct ofhooks default_ofhooks;
>  static uint64_t pick_datapath_id(const struct ofproto *);
>  static uint64_t pick_fallback_dpid(void);
>
> +static void ofproto_flush_flows__(struct ofproto *);
>  static int ofproto_expire(struct ofproto *);
>  static void flow_push_stats(struct ofproto *, const struct rule *,
>                             struct flow *, uint64_t packets, uint64_t bytes,
> @@ -690,7 +691,7 @@ ofproto_destroy(struct ofproto *p)
>
>     shash_find_and_delete(&all_ofprotos, dpif_name(p->dpif));
>
> -    ofproto_flush_flows(p);
> +    ofproto_flush_flows__(p);
>     connmgr_destroy(p->connmgr);
>     classifier_destroy(&p->cls);
>     hmap_destroy(&p->facets);
> @@ -999,8 +1000,8 @@ ofproto_delete_flow(struct ofproto *ofproto, const struct cls_rule *target)
>     }
>  }
>
> -void
> -ofproto_flush_flows(struct ofproto *ofproto)
> +static void
> +ofproto_flush_flows__(struct ofproto *ofproto)
>  {
>     struct facet *facet, *next_facet;
>     struct rule *rule, *next_rule;
> @@ -1025,6 +1026,12 @@ ofproto_flush_flows(struct ofproto *ofproto)
>     }
>
>     dpif_flow_flush(ofproto->dpif);
> +}
> +
> +void
> +ofproto_flush_flows(struct ofproto *ofproto)
> +{
> +    ofproto_flush_flows__(ofproto);
>     connmgr_flushed(ofproto->connmgr);
>  }
>
> --
> 1.7.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>



More information about the dev mailing list