Important Update:

- Implement Terminate counter
  Exit immediately on multiple terminate signals
- Move global var Terminate to SignalCore
This commit is contained in:
Charl Wentzel
2016-05-19 09:47:32 +02:00
parent 5c7eb956a7
commit e222d51997

View File

@@ -21,7 +21,11 @@
// Global vars // Global vars
extern char ProcessName[]; 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; 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 // Allow process to terminate normally
Terminate = true; 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; return;
}//--------------------------------------------------------------------------- }//---------------------------------------------------------------------------
@@ -109,18 +125,14 @@ void SignalAbort( int sig )
} }
// Show signal received // Show signal received
std::cerr << "\n" << ProcessName << ": *************************************\n"; std::cerr << "\n" << ProcessName << ": ********************************\n";
// Create Log Entry - but don't post // 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 ); LogMessage( ProcessName, LogMsg );//, ltDefault, -1 );
std::cerr << ProcessName << ": ** Terminating immediately! **\n"; std::cerr << ProcessName << ": ** Terminating immediately! **\n";
std::cerr << ProcessName << ": *************************************\n\n"; std::cerr << ProcessName << ": ********************************\n\n";
// Try to stop communications
// if (SocketManager)
// delete SocketManager;
// Terminate with signal // Terminate with signal
exit( sig ); exit( sig );