summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ofproto/ofproto-dpif-upcall.c9
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;