[Box Backup-dev] COMMIT r648 - box/chris/general/bin/bbackupd

boxbackup-dev@fluffy.co.uk boxbackup-dev@fluffy.co.uk
Wed, 19 Jul 2006 00:49:44 +0000 (GMT)


Author: chris
Date: 2006-07-19 00:49:41 +0000 (Wed, 19 Jul 2006)
New Revision: 648

Modified:
   box/chris/general/bin/bbackupd/BackupDaemon.cpp
Log:
* BackupDaemon.cpp
- Errors while accepting a connection on the command socket should
  kill the reader thread (or at least stop trying for a while)


Modified: box/chris/general/bin/bbackupd/BackupDaemon.cpp
===================================================================
--- box/chris/general/bin/bbackupd/BackupDaemon.cpp	2006-07-19 00:48:13 UTC (rev 647)
+++ box/chris/general/bin/bbackupd/BackupDaemon.cpp	2006-07-19 00:49:41 UTC (rev 648)
@@ -286,16 +286,35 @@
 void BackupDaemon::RunHelperThread(void)
 {
 	mpCommandSocketInfo = new CommandSocketInfo;
-	// this->mReceivedCommandConn = false;
 	WinNamedPipeStream& rSocket(mpCommandSocketInfo->mListeningSocket);
 
 	// loop until the parent process exits
-	while (TRUE)
+	while (!IsTerminateWanted())
 	{
 		try
 		{
 			rSocket.Accept(BOX_NAMED_PIPE_NAME);
+		}
+		catch (BoxException &e)
+		{
+			::syslog(LOG_ERR, "Failed to open command socket: %s",
+				e.what());
+			SetTerminateWanted();
+			break; // this is fatal
+		}
+		catch (...)
+		{
+			::syslog(LOG_ERR, "Failed to open command socket: "
+				"unknown error");
+			SetTerminateWanted();
+			break; // this is fatal
+		}
 
+		try
+		{
+			// Errors here do not kill the thread,
+			// only the current connection.
+
 			// This next section comes from Ben's original function
 			// Log
 			::syslog(LOG_INFO, "Connection from command socket");
@@ -324,7 +343,7 @@
 			IOStreamGetLine readLine(rSocket);
 			std::string command;
 
-			while (rSocket.IsConnected())
+			while (rSocket.IsConnected() && !IsTerminateWanted())
 			{
 				HANDLE handles[2];
 				handles[0] = mhMessageToSendEvent;