diff options
author | Ben Pfaff <blp@nicira.com> | 2013-01-25 17:26:42 -0800 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2013-01-25 17:26:42 -0800 |
commit | d6e95e998a37a98c70dc7e91a4765c777dbc66cb (patch) | |
tree | 000e763eb30c82de35af1e7a702c928df2dcd3d2 /ofproto | |
parent | 644e2a7cbd7043a88322177173606f675e55e7d7 (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.c | 3 |
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); |