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
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;
#include "p11-kit.h"
#include "private.h"
#include "proxy.h"
-#include "virtual-fixed.h"
#include <assert.h>
#include <stdarg.h>
_p11_kit_init (void)
{
p11_library_init_once ();
- p11_virtual_fixed_init ();
}
#ifdef __GNUC__
_p11_kit_fini (void)
{
p11_proxy_module_cleanup ();
- p11_virtual_fixed_uninit ();
p11_library_uninit ();
}
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:
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,
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)
{
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);
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;
break;
}
}
- p11_mutex_unlock (&fixed_mutex);
+ p11_mutex_unlock (&p11_virtual_mutex);
return result;
}
{
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