struct dpif_sflow *ds = ofproto->sflow;
if (sflow_options) {
+ uint32_t old_probability = ds ? dpif_sflow_get_probability(ds) : 0;
if (!ds) {
struct ofport_dpif *ofport;
HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) {
dpif_sflow_add_port(ds, &ofport->up, ofport->odp_port);
}
- ofproto->backer->need_revalidate = REV_RECONFIGURE;
}
dpif_sflow_set_options(ds, sflow_options);
+ if (dpif_sflow_get_probability(ds) != old_probability) {
+ ofproto->backer->need_revalidate = REV_RECONFIGURE;
+ }
} else {
if (ds) {
dpif_sflow_unref(ds);
}
ofproto = bundle->ofproto;
- mbridge_unregister_bundle(ofproto->mbridge, bundle->aux);
+ mbridge_unregister_bundle(ofproto->mbridge, bundle);
ovs_rwlock_wrlock(&xlate_rwlock);
xlate_bundle_remove(bundle);
hmap_remove(&backer->recirc_map, &node->hmap_node);
ovs_mutex_unlock(&backer->recirc_mutex);
recirc_id_free(backer->rid_pool, node->recirc_id);
+
+ if (node->ofproto != ofproto) {
+ VLOG_ERR("recirc_id %"PRIu32", freed by incorrect ofproto (%s),"
+ " expect ofproto (%s)", node->recirc_id, ofproto->up.name,
+ node->ofproto->up.name);
+ }
+
/* RCU postpone the free, since other threads may be referring
* to 'node' at same time. */
ovsrcu_postpone(free, node);