I've reviewed and tested this. In the patch description there are one small mistakes:

-execute_controller_action(), by passing true instead of false as its
+execute_controller_action(), by passing false instead of true as its

But more importantly, todo in handle_miss_upcalls are freed twice, and used after the first free, which cause segfaults. After modifying the third chunk it worked:

@@ -2710,14 +2709,10 @@ handle_miss_upcalls(struct ofproto_dpif
     /* Process each element in the to-do list, constructing the set of
      * operations to batch. */
     n_ops = 0;
-    HMAP_FOR_EACH_SAFE (miss, next_miss, hmap_node, &todo) {
+    HMAP_FOR_EACH (miss, hmap_node, &todo) {
         handle_flow_miss(ofproto, miss, flow_miss_ops, &n_ops);
-        ofpbuf_list_delete(&miss->packets);
-        hmap_remove(&todo, &miss->hmap_node);
-        free(miss);
     }
     assert(n_ops <= ARRAY_SIZE(flow_miss_ops));
-    hmap_destroy(&todo);

     /* Execute batch. */
     for (i = 0; i < n_ops; i++) {

Zoli

On 23/04/13 18:16, Ben Pfaff wrote:
One plausible solution seemed to be to turn over ownership of the packet to
execute_controller_action(), by passing true instead of false as its
'clone' argument.  Another is to add an else case to the "if" statement
that calls execute_controller_action() to free the packet.
@@ -2710,11 +2709,8 @@ handle_miss_upcalls(struct ofproto_dpif *ofproto, struct 
dpif_upcall *upcalls,
      /* Process each element in the to-do list, constructing the set of
       * operations to batch. */
      n_ops = 0;
-    HMAP_FOR_EACH_SAFE (miss, next_miss, hmap_node, &todo) {
+    HMAP_FOR_EACH (miss, hmap_node, &todo) {
          handle_flow_miss(ofproto, miss, flow_miss_ops, &n_ops);
-        ofpbuf_list_delete(&miss->packets);
-        hmap_remove(&todo, &miss->hmap_node);
-        free(miss);
      }
      assert(n_ops <= ARRAY_SIZE(flow_miss_ops));
      hmap_destroy(&todo);

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to