ovsdb-data: Make ovsdb_atom_default() thread-safe.
authorBen Pfaff <blp@nicira.com>
Tue, 23 Apr 2013 22:00:06 +0000 (15:00 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 22 Jul 2013 17:53:11 +0000 (10:53 -0700)
Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/ovsdb-data.c

index 7ec7694..ade1971 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "dynamic-string.h"
 #include "hash.h"
 
 #include "dynamic-string.h"
 #include "hash.h"
+#include "ovs-thread.h"
 #include "ovsdb-error.h"
 #include "ovsdb-parser.h"
 #include "json.h"
 #include "ovsdb-error.h"
 #include "ovsdb-parser.h"
 #include "json.h"
@@ -94,9 +95,9 @@ const union ovsdb_atom *
 ovsdb_atom_default(enum ovsdb_atomic_type type)
 {
     static union ovsdb_atom default_atoms[OVSDB_N_TYPES];
 ovsdb_atom_default(enum ovsdb_atomic_type type)
 {
     static union ovsdb_atom default_atoms[OVSDB_N_TYPES];
-    static bool inited;
+    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
 
 
-    if (!inited) {
+    if (ovsthread_once_start(&once)) {
         int i;
 
         for (i = 0; i < OVSDB_N_TYPES; i++) {
         int i;
 
         for (i = 0; i < OVSDB_N_TYPES; i++) {
@@ -104,7 +105,7 @@ ovsdb_atom_default(enum ovsdb_atomic_type type)
                 ovsdb_atom_init_default(&default_atoms[i], i);
             }
         }
                 ovsdb_atom_init_default(&default_atoms[i], i);
             }
         }
-        inited = true;
+        ovsthread_once_done(&once);
     }
 
     ovs_assert(ovsdb_atomic_type_is_valid(type));
     }
 
     ovs_assert(ovsdb_atomic_type_is_valid(type));