On 6/19/2018 12:46 PM, Kevin Traynor wrote:
On 06/19/2018 12:16 PM, Kevin Traynor wrote:
On 06/19/2018 12:11 PM, Kevin Traynor wrote:
+            if (per_port_mp && rte_errno == EEXIST) {
+                LIST_FOR_EACH (next, list_node, &dpdk_mp_list) {
+                    if (dmp->mp == next->mp) {
+                        rte_free(dmp);
+                        dmp = next;
+                        dmp->refcount = 1;
+                    }
+                }
+            }
+            else {
+                ovs_list_push_back(&dpdk_mp_list, &dmp->list_node);
+            }
I think you need to increment refcount and use the safe list option. How
about


Actually no, you don't need the safe list option, as it's the dmp that
is being freed

I obviously misread this (or wasn't concentrating enough), you do still
need the dmp = next as well.


Sure, I've responded in the original thread that I'll take this approach. I'm not against using the second safe list but wanted to keep it to 1 list if possible.

Ian

if (rte_errno == EEXIST) {
     LIST_FOR_EACH_SAFE (next, list_node, &dpdk_mp_list) {
         if (dmp->mp == next->mp) {
             next->refcount++;
             rte_free(dmp);
             break;
         }
     }
} else {
     dmp->refcount++;
     ovs_list_push_back(&dpdk_mp_list, &dmp->list_node);
}




_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to