]> granicus.if.org Git - p11-kit/commitdiff
virtual: Move mutex into p11_library_init()
authorDaiki Ueno <dueno@redhat.com>
Tue, 14 Feb 2017 15:36:23 +0000 (16:36 +0100)
committerDaiki Ueno <ueno@gnu.org>
Tue, 14 Feb 2017 15:51:58 +0000 (16:51 +0100)
We used to provide p11_virtual_fixed_{,un}init() to only initialize a
mutex used in virtual.c.  That required all the tests calling virtual
functions to call p11_virtual_fixed_{,un}init() in main().

For simplicity, move the mutex variable initialization into
p11_library_init().

common/library.c
common/library.h
p11-kit/util.c
p11-kit/virtual-fixed.h
p11-kit/virtual.c

index 502ea98e7a3126ac619a5fdcf46d2f3c1344166c..39a9c466e4372d0eff7169bd5e0e11c84ab29114 100644 (file)
@@ -59,6 +59,8 @@ static p11_local * _p11_library_get_thread_local (void);
 
 p11_mutex_t p11_library_mutex;
 
+p11_mutex_t p11_virtual_mutex;
+
 #ifdef OS_UNIX
 pthread_once_t p11_library_once = PTHREAD_ONCE_INIT;
 #endif
@@ -118,6 +120,7 @@ p11_library_init_impl (void)
        p11_debug_init ();
        p11_debug ("initializing library");
        p11_mutex_init (&p11_library_mutex);
+       p11_mutex_init (&p11_virtual_mutex);
        pthread_key_create (&thread_local, free);
        p11_message_storage = thread_local_message;
 
index f87494d9909e0eaee157428ddc4d563c0347164f..c3840f8e8a71fb7feadc90607454bef48ba84408 100644 (file)
@@ -44,6 +44,9 @@
 
 extern p11_mutex_t p11_library_mutex;
 
+/* Used in virtual.c to maintain the global list of precompiled closures */
+extern p11_mutex_t p11_virtual_mutex;
+
 extern unsigned int p11_forkid;
 
 #define       p11_lock()                   p11_mutex_lock (&p11_library_mutex);
index e51223ea3dd65297995ecc9592b2b7c174231fab..325d66904c3576c84a4b6e179015c1edb5d82a6d 100644 (file)
@@ -45,7 +45,6 @@
 #include "p11-kit.h"
 #include "private.h"
 #include "proxy.h"
-#include "virtual-fixed.h"
 
 #include <assert.h>
 #include <stdarg.h>
@@ -252,7 +251,6 @@ void
 _p11_kit_init (void)
 {
        p11_library_init_once ();
-       p11_virtual_fixed_init ();
 }
 
 #ifdef __GNUC__
@@ -262,7 +260,6 @@ void
 _p11_kit_fini (void)
 {
        p11_proxy_module_cleanup ();
-       p11_virtual_fixed_uninit ();
        p11_library_uninit ();
 }
 
@@ -280,14 +277,12 @@ DllMain (HINSTANCE instance,
        switch (reason) {
        case DLL_PROCESS_ATTACH:
                p11_library_init ();
-               p11_virtual_fixed_init ();
                break;
        case DLL_THREAD_DETACH:
                p11_library_thread_cleanup ();
                break;
        case DLL_PROCESS_DETACH:
                p11_proxy_module_cleanup ();
-               p11_virtual_fixed_uninit ();
                p11_library_uninit ();
                break;
        default:
index cc3b2c039660de62cddc846729f56e852ab198a6..13575220acbd52e713d90a13a1eb39e6621fcee8 100644 (file)
@@ -1138,7 +1138,4 @@ fixed ## fixed_index ## _C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list) \
        fixed ## fixed_index ## _C_WaitForSlotEvent \
 }
 
-void                    p11_virtual_fixed_init   (void);
-void                    p11_virtual_fixed_uninit (void);
-
 #endif /* __P11_VIRTUAL_FIXED_H__ */
index b066b4bb49a7f5538aa2269b149542a79a20f767..a2853bb42bc9e2511c6b81556b425d6ac7e03fcf 100644 (file)
@@ -88,7 +88,6 @@ typedef struct {
        int fixed_index;
 } Wrapper;
 
-static p11_mutex_t fixed_mutex;
 static CK_FUNCTION_LIST *fixed_closures[P11_VIRTUAL_MAX_FIXED];
 
 static Wrapper          *create_fixed_wrapper   (p11_virtual         *virt,
@@ -101,23 +100,6 @@ static void
                          p11_virtual_unwrap_fixed
                                                 (CK_FUNCTION_LIST_PTR module);
 
-void
-p11_virtual_fixed_init (void)
-{
-       p11_lock ();
-       p11_mutex_init (&fixed_mutex);
-       memset (fixed_closures, 0, sizeof (fixed_closures));
-       p11_unlock ();
-}
-
-void
-p11_virtual_fixed_uninit (void)
-{
-       p11_lock ();
-       p11_mutex_uninit (&fixed_mutex);
-       p11_unlock ();
-}
-
 static CK_RV
 short_C_GetFunctionStatus (CK_SESSION_HANDLE handle)
 {
@@ -2860,6 +2842,7 @@ p11_virtual_wrap (p11_virtual *virt,
        wrapper->destroyer = destroyer;
        wrapper->bound.version.major = CRYPTOKI_VERSION_MAJOR;
        wrapper->bound.version.minor = CRYPTOKI_VERSION_MINOR;
+       wrapper->fixed_index = -1;
 
        if (!init_wrapper_funcs (wrapper))
                return p11_virtual_wrap_fixed (virt, destroyer);
@@ -3266,7 +3249,7 @@ p11_virtual_wrap_fixed (p11_virtual *virt,
        CK_FUNCTION_LIST *result = NULL;
        size_t i;
 
-       p11_mutex_lock (&fixed_mutex);
+       p11_mutex_lock (&p11_virtual_mutex);
        for (i = 0; i < P11_VIRTUAL_MAX_FIXED; i++) {
                if (fixed_closures[i] == NULL) {
                        Wrapper *wrapper;
@@ -3276,7 +3259,7 @@ p11_virtual_wrap_fixed (p11_virtual *virt,
                        break;
                }
        }
-       p11_mutex_unlock (&fixed_mutex);
+       p11_mutex_unlock (&p11_virtual_mutex);
 
        return result;
 }
@@ -3286,14 +3269,14 @@ p11_virtual_unwrap_fixed (CK_FUNCTION_LIST_PTR module)
 {
        size_t i;
 
-       p11_mutex_lock (&fixed_mutex);
+       p11_mutex_lock (&p11_virtual_mutex);
        for (i = 0; i < P11_VIRTUAL_MAX_FIXED; i++) {
                if (fixed_closures[i] == module) {
                        fixed_closures[i] = NULL;
                        break;
                }
        }
-       p11_mutex_unlock (&fixed_mutex);
+       p11_mutex_unlock (&p11_virtual_mutex);
 }
 
 static bool