diff options
-rw-r--r-- | ofproto/ofproto-dpif-upcall.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c index 3b28f9a22..ccf15a3c8 100644 --- a/ofproto/ofproto-dpif-upcall.c +++ b/ofproto/ofproto-dpif-upcall.c @@ -2323,8 +2323,13 @@ revalidate(struct revalidator *revalidator) continue; } - /* The flow is now confirmed to be in the datapath. */ - transition_ukey(ukey, UKEY_OPERATIONAL); + if (ukey->state <= UKEY_OPERATIONAL) { + /* The flow is now confirmed to be in the datapath. */ + transition_ukey(ukey, UKEY_OPERATIONAL); + } else { + ovs_mutex_unlock(&ukey->mutex); + continue; + } if (!used) { used = ukey->created; |