pullup from trunk
authorTom Yu <tlyu@mit.edu>
Wed, 23 Mar 2005 03:27:29 +0000 (03:27 +0000)
committerTom Yu <tlyu@mit.edu>
Wed, 23 Mar 2005 03:27:29 +0000 (03:27 +0000)
ticket: 2888
version_fixed: 1.4.1

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-4@17143 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/gssapi/ChangeLog
src/lib/gssapi/gss_libinit.c
src/lib/krb5/ChangeLog
src/lib/krb5/krb5_libinit.c
src/util/et/ChangeLog
src/util/et/error_message.c
src/util/support/ChangeLog
src/util/support/threads.c

index 90ac10e4062b6dcd518221682a687c452c38b9f2..af50c5e46dea5d08d9cd2619925807c46390bb8a 100644 (file)
@@ -1,3 +1,7 @@
+2005-01-17  Jeffrey Altman <jaltman@mit.edu>
+
+        * gss_libinit.c: implement cleanup of mutexes, static vars, etc for Windows
+
 2004-07-29  Sam Hartman  <hartmans@mit.edu>
 
        * libgssapi_krb5.exports: Add lucid context routines and gss_krb5_set_allowable_enctypes
index a43989f0cba0822eb9be5666888eff909a5f44ef..d45ac440cd8ef7ff5376177435afa5c207d2d718 100644 (file)
@@ -41,7 +41,10 @@ void gssint_lib_fini(void)
     remove_error_table(&et_k5g_error_table);
     remove_error_table(&et_ggss_error_table);
 #endif
+    k5_key_delete(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME);
+    k5_key_delete(K5_KEY_GSS_KRB5_CCACHE_NAME);
     k5_mutex_destroy(&kg_vdb.mutex);
+    k5_mutex_destroy(&gssint_krb5_keytab_lock);
 }
 
 OM_uint32 gssint_initialize_library (void)
index ef206a9bacb3b6b0ff0edbe4e833a4020b948fcd..698912e507ca3ca84d91adb83196e023daffad97 100644 (file)
@@ -1,3 +1,7 @@
+2005-01-17  Jeffrey Altman <jaltman@mit.edu>
+
+        * krb5_libinit.c: implement library cleanup of mutexes, static vars, etc
+
 2005-01-04  Jeffrey Altman <jaltman@mit.edu>
       
         * libkrb5.exports: add krb5_is_thread_safe
index 8290c14761f5bb3a7ee2ef7b4bb51f94393888a3..ece79cfc72900bee3458eb4adb4de41dd09399ce 100644 (file)
@@ -69,9 +69,11 @@ void krb5int_lib_fini(void)
     if (!INITIALIZER_RAN(krb5int_lib_init) || PROGRAM_EXITING())
        return;
 
-    krb5int_rc_terminate();
-    krb5int_kt_finalize();
+    k5_mutex_destroy(&krb5int_us_time_mutex);
+
     krb5int_cc_finalize();
+    krb5int_kt_finalize();
+    krb5int_rc_terminate();
 
 #if defined(_WIN32) || defined(USE_CCAPI)
     krb5_stdcc_shutdown();
index eeec13ebd7510e0723629fb070ec68d60b0212fb..bec74072234bc37634cc85fe73510326fda9af31 100644 (file)
@@ -1,3 +1,7 @@
+2005-01-17  Jeffrey Altman <jaltman@mit.edu>
+
+        * error_message.c: implement library unload cleanup of mutexes
+
 2005-01-13  Ken Raeburn  <raeburn@mit.edu>
 
        * error_message.c (com_err_terminate): Lock the list mutex before
index 8bef6804d9507dd65c8f98bdfd204a12a2e70168..cb76b2a37520ed279eb653fd4d4254394923c537 100644 (file)
@@ -37,6 +37,7 @@ extern const int sys_nerr;
 /*@null@*/ static struct et_list * _et_list = (struct et_list *) NULL;
 /*@null@*//*@only@*/static struct dynamic_et_list * et_list_dynamic;
 static k5_mutex_t et_list_lock = K5_MUTEX_PARTIAL_INITIALIZER;
+static int terminated = 0;     /* for debugging shlib fini sequence errors */
 
 MAKE_INIT_FUNCTION(com_err_initialize);
 MAKE_FINI_FUNCTION(com_err_terminate);
@@ -44,6 +45,7 @@ MAKE_FINI_FUNCTION(com_err_terminate);
 int com_err_initialize(void)
 {
     int err;
+    terminated = 0;
     err = k5_mutex_finish_init(&et_list_lock);
     if (err)
        return err;
@@ -56,12 +58,13 @@ int com_err_initialize(void)
     return 0;
 }
 
-static int terminated = 0;     /* for debugging shlib fini sequence errors */
 void com_err_terminate(void)
 {
     struct dynamic_et_list *e, *enext;
     if (! INITIALIZER_RAN(com_err_initialize) || PROGRAM_EXITING())
        return;
+    k5_key_delete(K5_KEY_COM_ERR);
+    k5_mutex_destroy(&com_err_hook_lock);
     k5_mutex_lock(&et_list_lock);
     for (e = et_list_dynamic; e; e = enext) {
        enext = e->next;
index ae56c70947d2d54a566d837130d35cdb1e80ae96..bfb973ed6bf4ac7d71bb41bb2c43e8df3ae4654a 100644 (file)
@@ -6,6 +6,11 @@
        interfering with the global list of thread specific data
        (used for library termination).
 
+2005-01-17  Jeffrey Altman <jaltman@mit.edu>
+
+        * threads.c: implement cleanup of static vars on library
+                unload (for Windows)
+
 2004-12-15  Jeffrey Altman <jaltman@mit.edu>
 
         * Makefile.in: rename krb5support_32.dll to k5sprt32.dll
index 4e6bbfc8de3a9354b8258cfb222ad51c73f1f6da..5eb85cdaa4e2f75400b292eab3a772f85bd27d01 100644 (file)
@@ -311,12 +311,15 @@ int k5_key_delete (k5_key_t keynum)
     /* XXX Memory leak here!
        Need to destroy the associated data for all threads.
        But watch for race conditions in case threads are going away too.  */
+    assert(destructors_set[keynum] == 1);
+    destructors_set[keynum] = 0;
+    destructors[keynum] = 0;
     LeaveCriticalSection(&key_lock);
 
 #else /* POSIX */
 
-    /* Not written yet.  */
-    abort();
+    /* Not written yet -- resource leak!  */
+    /* abort(); */
 
 #endif