* error_message.c (terminated): New variable.
authorKen Raeburn <raeburn@mit.edu>
Mon, 31 May 2004 04:10:18 +0000 (04:10 +0000)
committerKen Raeburn <raeburn@mit.edu>
Mon, 31 May 2004 04:10:18 +0000 (04:10 +0000)
(com_err_terminate): Set it.
(remove_error_table): Check it, warn and abort if set.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16379 dc483132-0cff-0310-8789-dd5450dbe970

src/util/et/ChangeLog
src/util/et/error_message.c

index 4e99e206f0d69ffc0956344180d9db15c9acf75a..9115708fa057857270921ea5639a78a3ebc8a5fa 100644 (file)
@@ -1,3 +1,9 @@
+2004-05-31  Ken Raeburn  <raeburn@mit.edu>
+
+       * error_message.c (terminated): New variable.
+       (com_err_terminate): Set it.
+       (remove_error_table): Check it, warn and abort if set.
+
 2004-05-05  Ken Raeburn  <raeburn@mit.edu>
 
        * error_message.c (buffer): Static variable deleted.
index dd3c36fd089a74c95e1e5c9702ddc0f360b2a11b..e785172d929886ad7c0cc5cb77d09af749bfc1cd 100644 (file)
@@ -57,6 +57,7 @@ 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;
@@ -67,6 +68,7 @@ void com_err_terminate(void)
        enext = e->next;
        free(e);
     }
+    terminated = 1;
 }
 
 #ifndef DEBUG_TABLE_LIST
@@ -301,6 +303,12 @@ remove_error_table(const struct error_table * et)
 
     if (CALL_INIT_FUNCTION(com_err_initialize))
        return 0;
+#if !defined(ENABLE_THREADS) && defined(DEBUG_THREADS)
+    if (et_list_lock.initialized == 0 && terminated != 0) {
+       fprintf(stderr, "\n\n *** Function remove_error_table called after com_err library termination. ***\n *** Shared library termination code executed in incorrect order?          ***\n\n");
+       abort();
+    }
+#endif
     merr = k5_mutex_lock(&et_list_lock);
     if (merr)
        return merr;