diff options
Diffstat (limited to 'src/lib/gssapi/gss_libinit.c')
-rw-r--r-- | src/lib/gssapi/gss_libinit.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/lib/gssapi/gss_libinit.c b/src/lib/gssapi/gss_libinit.c index 0568f2964..fb80c8946 100644 --- a/src/lib/gssapi/gss_libinit.c +++ b/src/lib/gssapi/gss_libinit.c @@ -5,6 +5,7 @@ #include "gssapiP_krb5.h" #include "gss_libinit.h" +#include "k5-platform.h" static int initialized = 0; @@ -12,19 +13,33 @@ static int initialized = 0; * Initialize the GSSAPI library. */ +MAKE_INIT_FUNCTION(gssint_lib_init); +MAKE_FINI_FUNCTION(gssint_lib_fini); + +int gssint_lib_init(void) +{ + return k5_mutex_finish_init(&kg_vdb.mutex); +} + +void gssint_lib_fini(void) +{ + if (!INITIALIZER_RAN(gssint_lib_init) || PROGRAM_EXITING()) + return; + k5_mutex_destroy(&kg_vdb.mutex); +} + OM_uint32 gssint_initialize_library (void) { - if (!initialized) { #if !USE_BUNDLE_ERROR_STRINGS add_error_table(&et_k5g_error_table); add_error_table(&et_ggss_error_table); #endif - initialized = 1; + initialized = 1; } - - return 0; + + return CALL_INIT_FUNCTION(gssint_lib_init); } /* @@ -33,13 +48,12 @@ OM_uint32 gssint_initialize_library (void) void gssint_cleanup_library (void) { - assert (initialized); - + #if !USE_BUNDLE_ERROR_STRINGS remove_error_table(&et_k5g_error_table); remove_error_table(&et_ggss_error_table); #endif - + initialized = 0; } |