Rename dtls_lib_init() -> dtls_cache_init()
authorKevin Klues <klueska@cs.berkeley.edu>
Mon, 24 Aug 2015 22:42:27 +0000 (15:42 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 2 Sep 2015 17:50:05 +0000 (13:50 -0400)
The only initialization that needs to happen here is in support of
allocing/freeing from the caches, so it's not really a "lib" init in
that sense (it's more of a cache init). As part of this, we make sure
that __alloc_dtls_key() call triggers the initialization rather than the
dtls_key_create() call.

user/parlib/dtls.c

index f0a7bc5..f29f789 100644 (file)
@@ -62,8 +62,29 @@ struct kmem_cache *__dtls_values_cache;
 static __thread dtls_data_t __dtls_data;
 static __thread bool __dtls_initialized = false;
 
+/* Initialize the slab caches for allocating dtls keys and values. */
+int dtls_cache_init()
+{
+  /* Make sure this only runs once */
+  static bool initialized = false;
+  if (initialized)
+      return 0;
+  initialized = true;
+
+  /* Initialize the global cache of dtls_keys */
+  __dtls_keys_cache = kmem_cache_create("dtls_keys_cache",
+    sizeof(struct dtls_key), __alignof__(struct dtls_key), 0, NULL, NULL);
+
+  /* Initialize the global cache of dtls_values */
+  __dtls_values_cache = kmem_cache_create("dtls_values_cache",
+    sizeof(struct dtls_value), __alignof__(struct dtls_value), 0, NULL, NULL);
+
+  return 0;
+}
+
 static dtls_key_t __allocate_dtls_key() 
 {
+  dtls_cache_init();
   dtls_key_t key = kmem_cache_alloc(__dtls_keys_cache, 0);
   assert(key);
   key->ref_count = 1;
@@ -90,28 +111,8 @@ static void __free_dtls_value(struct dtls_value *v)
   kmem_cache_free(__dtls_values_cache, v);
 }
 
-/* Constructor to get a reference to the main thread's TLS descriptor */
-int dtls_lib_init()
-{
-  /* Make sure this only runs once */
-  static bool initialized = false;
-  if (initialized)
-      return 0;
-  initialized = true;
-  
-  /* Initialize the global cache of dtls_keys */
-  __dtls_keys_cache = kmem_cache_create("dtls_keys_cache", 
-    sizeof(struct dtls_key), __alignof__(struct dtls_key), 0, NULL, NULL);
-  
-  __dtls_values_cache = kmem_cache_create("dtls_values_cache", 
-    sizeof(struct dtls_value), __alignof__(struct dtls_value), 0, NULL, NULL);
-  
-  return 0;
-}
-
 dtls_key_t dtls_key_create(dtls_dtor_t dtor)
 {
-  dtls_lib_init();
   dtls_key_t key = __allocate_dtls_key();
   key->valid = true;
   key->dtor = dtor;