Signed-off-by: Ben Pfaff <b...@nicira.com>
---
 lib/dpif-linux.c |    7 +++++--
 lib/dpif.c       |    6 +++---
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c
index 958873c..831da3b 100644
--- a/lib/dpif-linux.c
+++ b/lib/dpif-linux.c
@@ -1440,9 +1440,10 @@ const struct dpif_class dpif_linux_class = {
 static int
 dpif_linux_init(void)
 {
-    static int error = -1;
+    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
+    static int error;
 
-    if (error < 0) {
+    if (ovsthread_once_start(&once)) {
         unsigned int ovs_vport_mcgroup;
 
         error = nl_lookup_genl_family(OVS_DATAPATH_FAMILY,
@@ -1472,6 +1473,8 @@ dpif_linux_init(void)
             nln = nln_create(NETLINK_GENERIC, ovs_vport_mcgroup,
                              dpif_linux_nln_parse, &vport);
         }
+
+        ovsthread_once_done(&once);
     }
 
     return error;
diff --git a/lib/dpif.c b/lib/dpif.c
index e793262..4878aac 100644
--- a/lib/dpif.c
+++ b/lib/dpif.c
@@ -97,15 +97,15 @@ static void log_execute_message(struct dpif *, const struct 
dpif_execute *,
 static void
 dp_initialize(void)
 {
-    static int status = -1;
+    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
 
-    if (status < 0) {
+    if (ovsthread_once_start(&once)) {
         int i;
 
-        status = 0;
         for (i = 0; i < ARRAY_SIZE(base_dpif_classes); i++) {
             dp_register_provider(base_dpif_classes[i]);
         }
+        ovsthread_once_done(&once);
     }
 }
 
-- 
1.7.2.5

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

Reply via email to