[26200] in CVS-changelog-for-Kerberos-V5

home help back first fref pref prev next nref lref last post

svn rev #25540: trunk/src/ccapi/ common/win/ server/win/

daemon@ATHENA.MIT.EDU (tlyu@mit.edu)
Mon Dec 12 15:44:33 2011

Date: Mon, 12 Dec 2011 15:44:31 -0500
From: tlyu@mit.edu
Message-Id: <201112122044.pBCKiV0h004385@drugstore.mit.edu>
To: cvs-krb5@mit.edu
Reply-To: krbdev@mit.edu
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: cvs-krb5-bounces@mit.edu

http://src.mit.edu/fisheye/changelog/krb5/?cs=25540
Commit By: tlyu
Log Message:
ticket: 7050
subject: Make ccapiserver exit if its receiveloop thread terminates for any reason.

This happens, for example, when the rpc endpoint is already registered
by another ccapiserver process.  There's no reason to leave a zombie
process running that can't receive messages.


Changed Files:
U   trunk/src/ccapi/common/win/win-utils.h
U   trunk/src/ccapi/server/win/ccs_os_server.cpp
Modified: trunk/src/ccapi/common/win/win-utils.h
===================================================================
--- trunk/src/ccapi/common/win/win-utils.h	2011-12-12 20:44:21 UTC (rev 25539)
+++ trunk/src/ccapi/common/win/win-utils.h	2011-12-12 20:44:30 UTC (rev 25540)
@@ -42,7 +42,8 @@
     CCMSG_REQUEST_REPLY,
     CCMSG_DISCONNECT,
     CCMSG_LISTEN,
-    CCMSG_PING
+    CCMSG_PING,
+    CCMSG_QUIT
     };
 
 char*                   clientEndpoint(const char* UUID);

Modified: trunk/src/ccapi/server/win/ccs_os_server.cpp
===================================================================
--- trunk/src/ccapi/server/win/ccs_os_server.cpp	2011-12-12 20:44:21 UTC (rev 25539)
+++ trunk/src/ccapi/server/win/ccs_os_server.cpp	2011-12-12 20:44:30 UTC (rev 25540)
@@ -199,6 +199,7 @@
 
     ParseOpts::Opts opts         = { 0 };
     ParseOpts       PO;
+    BOOL            bQuit = FALSE;
 
     opts.cMinCalls  = 1;
     opts.cMaxCalls  = 20;
@@ -230,7 +231,7 @@
     threadStatus    = _beginthread(receiveLoop, 0, (void*)&rpcargs);
 
     /* We handle the queue entries here.  Work loop: */
-    while (TRUE) {
+    while (!bQuit) {
         worklist_wait();
         while (!worklist_isEmpty()) {
             k5_ipc_stream    buf             = NULL;
@@ -243,6 +244,10 @@
             ccs_pipe_t     pipe2            = NULL;
 
             if (worklist_remove(&rpcmsg, &pipe, &buf, &serverStartTime)) {
+                if (rpcmsg == CCMSG_QUIT) {
+                    bQuit = TRUE;
+                    break;
+                    }
                 uuid = ccs_win_pipe_getUuid(pipe);
 #if 0
                 cci_debug_printf("%s: processing WorkItem msg:%ld pipeUUID:<%s> pipeHandle:0x%X SST:%ld",
@@ -462,6 +467,8 @@
             free_alloc_p(&endpoint);
         }
 
+    // tell main thread to shutdown since it won't receive any more messages
+    worklist_add(CCMSG_QUIT, NULL, NULL, 0);
     _endthread();
     }   // End receiveLoop
 

_______________________________________________
cvs-krb5 mailing list
cvs-krb5@mit.edu
https://mailman.mit.edu/mailman/listinfo/cvs-krb5

home help back first fref pref prev next nref lref last post