Delete meters in the right place.
authorBen Pfaff <blp@nicira.com>
Fri, 13 Sep 2013 04:18:01 +0000 (21:18 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 13 Sep 2013 04:18:01 +0000 (21:18 -0700)
Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
ofproto/ofproto.c

index cdc058a..3d0d1b0 100644 (file)
@@ -1135,11 +1135,6 @@ ofproto_destroy__(struct ofproto *ofproto)
     ovs_assert(list_is_empty(&ofproto->pending));
     ovs_assert(!ofproto->n_pending);
 
-    if (ofproto->meters) {
-        meter_delete(ofproto, 1, ofproto->meter_features.max_meters);
-        free(ofproto->meters);
-    }
-
     connmgr_destroy(ofproto->connmgr);
 
     hmap_remove(&all_ofprotos, &ofproto->hmap_node);
@@ -1177,6 +1172,13 @@ ofproto_destroy(struct ofproto *p)
         return;
     }
 
+    if (p->meters) {
+        meter_delete(p, 1, p->meter_features.max_meters);
+        p->meter_features.max_meters = 0;
+        free(p->meters);
+        p->meters = NULL;
+    }
+
     ofproto_flush__(p);
     HMAP_FOR_EACH_SAFE (ofport, next_ofport, hmap_node, &p->ports) {
         ofport_destroy(ofport);