The loop in revalidate() needs to ensure that any data obtained from
dpif_flow_dump_next() is used before it is destroyed, as indicated by
dpif_flow_dump_next_may_destroy_keys(). In the common case, where
processing reaches the end of the main "while" loop, it does this, but
in two corner cases the code in the loop execute "continue;", which skipped
the check. This commit fixes the problem.
Bug #
1249988.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Joe Stringer <joestringer@nicira.com>
* flow this time. */
ovs_mutex_unlock(&ukey->mutex);
COVERAGE_INC(upcall_duplicate_flow);
- continue;
+ goto next;
}
used = ukey->created;
* another revalidator is processing this flow
* concurrently, so don't bother processing it. */
ukey_delete(NULL, ukey);
- continue;
+ goto next;
}
}
dump_op_init(&ops[n_ops++], key, key_len, ukey);
}
+ next:
may_destroy = dpif_flow_dump_next_may_destroy_keys(&udpif->dump,
state);