dpif: Make dpif_flow_get() results predictable on error.
authorBen Pfaff <blp@nicira.com>
Tue, 13 Apr 2010 23:49:22 +0000 (16:49 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 13 Apr 2010 23:51:13 +0000 (16:51 -0700)
If dpif_flow_get()'s caller is less cautious than it should be, then it
will get surprising results when it looks at the returned flow on error.
This commit at least gives it plausible results.

lib/dpif.c

index 8e5cf9ffcb36af7650f6485a46456b9289907e45..186f165c1745558883b4e8fed88874433e4cec04 100644 (file)
@@ -724,6 +724,11 @@ dpif_flow_get(const struct dpif *dpif, struct odp_flow *flow)
     if (!error) {
         error = flow->stats.error;
     }
+    if (error) {
+        /* Make the results predictable on error. */
+        memset(&flow->stats, 0, sizeof flow->stats);
+        flow->n_actions = 0;
+    }
     if (should_log_flow_message(error)) {
         log_flow_operation(dpif, "flow_get", error, flow);
     }