aboutsummaryrefslogtreecommitdiff
path: root/ofproto
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2013-01-25 17:26:42 -0800
committerBen Pfaff <blp@nicira.com>2013-01-25 17:26:42 -0800
commitd6e95e998a37a98c70dc7e91a4765c777dbc66cb (patch)
tree000e763eb30c82de35af1e7a702c928df2dcd3d2 /ofproto
parent644e2a7cbd7043a88322177173606f675e55e7d7 (diff)
ofproto: Maintain "expirable" list for "add" flow_mod with replaced rule.
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>
Diffstat (limited to 'ofproto')
-rw-r--r--ofproto/ofproto.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 249f2d5d..c0d94f72 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -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);