ofproto: Maintain "expirable" list for "add" flow_mod with replaced rule.
authorBen Pfaff <blp@nicira.com>
Sat, 26 Jan 2013 01:26:42 +0000 (17:26 -0800)
committerBen Pfaff <blp@nicira.com>
Sat, 26 Jan 2013 01:26:42 +0000 (17:26 -0800)
Commit e503cc199 (ofproto: Optimise OpenFlow flow expiry) optimized
OpenFlow flow expiration by putting expirable flows on a list, but it
failed to remove flows from the list when they were replaced by a new
flow with an OpenFlow flow_mod "add" operation.  This commit fixes the
problem.

Found by valgrind.

CC: Simon Horman <horms@verge.net.au>
Signed-off-by: Ben Pfaff <blp@nicira.com>
ofproto/ofproto.c

index 249f2d5..c0d94f7 100644 (file)
@@ -4858,6 +4858,9 @@ oftable_replace_rule(struct rule *rule)
 
     victim = rule_from_cls_rule(classifier_replace(&table->cls, &rule->cr));
     if (victim) {
+        if (!list_is_empty(&victim->expirable)) {
+            list_remove(&victim->expirable);
+        }
         eviction_group_remove_rule(victim);
     }
     eviction_group_add_rule(rule);