Remove ipc message sent on cc_context_release
authorAlexandra Ellwood <lxs@mit.edu>
Wed, 22 Oct 2008 20:40:29 +0000 (20:40 +0000)
committerAlexandra Ellwood <lxs@mit.edu>
Wed, 22 Oct 2008 20:40:29 +0000 (20:40 +0000)
IPC message was causing problems when called from thread fini function
(via krb5_stdcc_shutdown).

ticket: new

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

src/ccapi/common/cci_types.h
src/ccapi/lib/ccapi_context.c
src/ccapi/lib/ccapi_context.h
src/ccapi/server/ccs_cache_collection.c

index 20c64701a2f76d6f76ac917c99bbd8b45a36ca7d..43f7100cee64006cd65e4ad4d9a969c6b00adca9 100644 (file)
@@ -39,7 +39,7 @@ enum cci_msg_id_t {
     /* cc_context_t */
     cci_context_first_msg_id,
     
-    cci_context_release_msg_id,
+    cci_context_unused_release_msg_id,  /* Unused. Handle for old clients. */
     cci_context_sync_msg_id,
     cci_context_get_change_time_msg_id,
     cci_context_wait_for_change_msg_id,
index 0f1712ea48b6c4d0c06b2407c7c9387c6a0d54ef..7ba3db4d26da38bafe2d5c957a59164e8f330879 100644 (file)
@@ -198,6 +198,16 @@ cc_int32 cc_initialize (cc_context_t  *out_context,
 #endif
 
 /* ------------------------------------------------------------------------ */
+/* 
+ * Currently does not need to talk to the server since the server must 
+ * handle cleaning up resources from crashed clients anyway.  
+ * 
+ * NOTE: if server communication is ever added here, make sure that 
+ * krb5_stdcc_shutdown calls an internal function which does not talk to the
+ * server.  krb5_stdcc_shutdown is called from thread fini functions and may 
+ * crash talking to the server depending on what order the OS calls the fini 
+ * functions (ie: if the ipc layer fini function is called first). 
+ */
 
 cc_int32 ccapi_context_release (cc_context_t in_context)
 {
@@ -206,17 +216,6 @@ cc_int32 ccapi_context_release (cc_context_t in_context)
     
     if (!in_context) { err = ccErrBadParam; }
     
-    if (!err) {
-        err = cci_context_sync (context, 0);
-    }
-    
-    if (!err) {
-        err =  cci_ipc_send_no_launch (cci_context_release_msg_id,
-                                       context->identifier,
-                                       NULL,
-                                       NULL);
-    }
-    
     if (!err) {
         cci_identifier_release (context->identifier);
         free (context->functions);
index 7462a056e442e1937f7665c7f885a5dd8db7f89d..564f49db9d6785994453abfe71eacd1c16f090df 100644 (file)
 
 #include "cci_common.h"
 
+/* Used for freeing ccapi context in thread fini calls 
+ * Does not tell the server you are exiting. */
+cc_int32 cci_context_destroy (cc_context_t in_context);
+
 cc_int32 ccapi_context_release (cc_context_t in_context);
 
 cc_int32 ccapi_context_get_change_time (cc_context_t  in_context,
index b09ae8d8ef37e6b22d87ba3f61e587e5890e2bf4..3790a10aaca7505043e58af60b8f1017d790ae41 100644 (file)
@@ -571,25 +571,6 @@ cc_int32 ccs_cache_collection_set_default_ccache (ccs_cache_collection_t  io_cac
 
 /* ------------------------------------------------------------------------ */
 
-static cc_int32 ccs_cache_collection_context_release (ccs_cache_collection_t io_cache_collection,
-                                                       k5_ipc_stream           in_request_data,
-                                                       k5_ipc_stream           io_reply_data)
-{
-    cc_int32 err = ccNoError;
-    
-    if (!io_cache_collection) { err = cci_check_error (ccErrBadParam); }
-    if (!in_request_data    ) { err = cci_check_error (ccErrBadParam); }
-    if (!io_reply_data      ) { err = cci_check_error (ccErrBadParam); }
-    
-    if (!err) {
-        /* Currently does nothing */
-    }
-    
-    return cci_check_error (err);    
-}
-
-/* ------------------------------------------------------------------------ */
-
 static cc_int32 ccs_cache_collection_sync (ccs_cache_collection_t io_cache_collection,
                                             k5_ipc_stream           in_request_data,
                                             k5_ipc_stream           io_reply_data)
@@ -1051,9 +1032,8 @@ static cc_int32 ccs_cache_collection_unlock (ccs_pipe_t             in_client_pi
     }
     
     if (!err) {
-        if (in_request_name == cci_context_release_msg_id) {
-            err = ccs_cache_collection_context_release (io_cache_collection,
-                                                        in_request_data, reply_data);
+        if (in_request_name == cci_context_unused_release_msg_id) {
+            /* Old release message.  Do nothing. */
             
         } else if (in_request_name == cci_context_sync_msg_id) {
             err = ccs_cache_collection_sync (io_cache_collection,