ofproto: Fix is_flow_deletion_pending() false positive.
authorEthan Jackson <ethan@nicira.com>
Thu, 1 May 2014 00:24:21 +0000 (17:24 -0700)
committerEthan Jackson <ethan@nicira.com>
Thu, 1 May 2014 19:46:17 +0000 (12:46 -0700)
If one tries to install a rule that's identical to another rule in
another OpenFlow table which is being deleted, it's possible that
is_flow_deletion_pending() might confuse them and block the
installation.  This is such an edge case I doubt it has ever actually
happened.

Found by inspection.

Signed-off-by: Ethan Jackson <ethan@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
ofproto/ofproto.c

index 208efc1..eb1f3be 100644 (file)
@@ -3953,7 +3953,8 @@ is_flow_deletion_pending(const struct ofproto *ofproto,
         HMAP_FOR_EACH_WITH_HASH (op, hmap_node,
                                  cls_rule_hash(cls_rule, table_id),
                                  &ofproto->deletions) {
-            if (cls_rule_equal(cls_rule, &op->rule->cr)) {
+            if (op->rule->table_id == table_id
+                && cls_rule_equal(cls_rule, &op->rule->cr)) {
                 return true;
             }
         }