From e222d519979264f5fe33a9a005cf974814c2a89f Mon Sep 17 00:00:00 2001 From: Charl Wentzel Date: Thu, 19 May 2016 09:47:32 +0200 Subject: [PATCH] Important Update: - Implement Terminate counter Exit immediately on multiple terminate signals - Move global var Terminate to SignalCore --- SignalCore.cpp | 50 +++++++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/SignalCore.cpp b/SignalCore.cpp index 10082f7..58b67b8 100644 --- a/SignalCore.cpp +++ b/SignalCore.cpp @@ -21,7 +21,11 @@ // Global vars extern char ProcessName[]; -extern bool Terminate; + +// Termination Vars +bool Terminate = false; +int TermCount = 0; +int MaxTermCount = 5; //--------------------------------------------------------------------------- @@ -75,18 +79,30 @@ void SignalTerminate( int sig ) default : strcpy( SigName, "UNKNOWN" ); break; } - // Show signal received if not already terminated - std::cerr << "\r\n" << ProcessName << ": *****************************************\n"; - - // Create Log Entry - sprintf( LogMsg, " ** Terminate signal received (%s) **", SigName ); - LogMessage( ProcessName, LogMsg );//, ltDefault, -1 ); - - std::cerr << ProcessName << ": ** Terminating normally... **\n"; - std::cerr << ProcessName << ": *****************************************\n\n"; - // Allow process to terminate normally Terminate = true; + TermCount++; + + // Check for Terminate Limit + // Show signal received if not already terminated + std::cerr << "\r\n" << ProcessName << ": ***********************************\n"; + + // Create Log Entry + sprintf( LogMsg, " ** %s signal received [%d] **", SigName, TermCount ); + LogMessage( ProcessName, LogMsg );//, ltDefault, -1 ); + + if (TermCount < MaxTermCount) + { + std::cerr << ProcessName << ": ** Terminating normally... **\n"; + std::cerr << ProcessName << ": ***********************************\n\n"; + } + else + { + std::cerr << ProcessName << ": ** Terminating immediately! **\n"; + std::cerr << ProcessName << ": ***********************************\n\n"; + + exit( sig ); + } return; }//--------------------------------------------------------------------------- @@ -109,18 +125,14 @@ void SignalAbort( int sig ) } // Show signal received - std::cerr << "\n" << ProcessName << ": *************************************\n"; + std::cerr << "\n" << ProcessName << ": ********************************\n"; // Create Log Entry - but don't post - sprintf( LogMsg, " ** Abort signal received (%s) **", SigName ); + sprintf( LogMsg, " ** %s signal received **", SigName ); LogMessage( ProcessName, LogMsg );//, ltDefault, -1 ); - std::cerr << ProcessName << ": ** Terminating immediately! **\n"; - std::cerr << ProcessName << ": *************************************\n\n"; - - // Try to stop communications -// if (SocketManager) -// delete SocketManager; + std::cerr << ProcessName << ": ** Terminating immediately! **\n"; + std::cerr << ProcessName << ": ********************************\n\n"; // Terminate with signal exit( sig );