[26200] in CVS-changelog-for-Kerberos-V5
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