aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ofproto/ofproto.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index c949fde3..b35139cb 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -4543,8 +4543,6 @@ send_flow_removed(struct ofproto *p, struct rule *rule,
long long int now, uint8_t reason)
{
struct ofconn *ofconn;
- struct ofconn *prev;
- struct ofpbuf *buf = NULL;
if (!rule->send_flow_removed) {
return;
@@ -4556,20 +4554,16 @@ send_flow_removed(struct ofproto *p, struct rule *rule,
* being added (and expiring). (It also prevents processing OpenFlow
* requests that would not add new flows, so it is imperfect.) */
- prev = NULL;
LIST_FOR_EACH (ofconn, node, &p->all_conns) {
- if (rconn_is_connected(ofconn->rconn)
- && ofconn_receives_async_msgs(ofconn)) {
- if (prev) {
- queue_tx(ofpbuf_clone(buf), prev, prev->reply_counter);
- } else {
- buf = compose_flow_removed(p, rule, now, reason);
- }
- prev = ofconn;
+ struct ofpbuf *msg;
+
+ if (!rconn_is_connected(ofconn->rconn)
+ || !ofconn_receives_async_msgs(ofconn)) {
+ continue;
}
- }
- if (prev) {
- queue_tx(buf, prev, prev->reply_counter);
+
+ msg = compose_flow_removed(p, rule, now, reason);
+ queue_tx(msg, ofconn, ofconn->reply_counter);
}
}