diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/include/Ice/Application.h | 10 | ||||
-rw-r--r-- | cpp/src/Ice/Application.cpp | 13 |
2 files changed, 23 insertions, 0 deletions
diff --git a/cpp/include/Ice/Application.h b/cpp/include/Ice/Application.h index e983e050fe3..90ddaf7f413 100644 --- a/cpp/include/Ice/Application.h +++ b/cpp/include/Ice/Application.h @@ -83,10 +83,20 @@ public: static void holdInterrupt(); static void releaseInterrupt(); + // + // This method returns true if a signal handler was triggered, + // false otherwise. This can be used once Communicator::waitForShutdown() + // returns to test whether the shutdown was due to an interrupt (interrupted() + // returns true in that case) or because Communicator::shutdown() was called + // (interupted() returns false in that case). + // + static bool interrupted(); + private: static const char* _appName; static CommunicatorPtr _communicator; + static bool _interrupted; #ifdef _WIN32 friend BOOL WINAPI interruptHandler(DWORD); diff --git a/cpp/src/Ice/Application.cpp b/cpp/src/Ice/Application.cpp index f87d16503be..78f3ed6ac95 100644 --- a/cpp/src/Ice/Application.cpp +++ b/cpp/src/Ice/Application.cpp @@ -20,6 +20,8 @@ using namespace Ice; const char* Application::_appName = 0; CommunicatorPtr Application::_communicator; +bool Application::_interrupted = false; + #ifndef _WIN32 const int Application::signals[] = { SIGHUP, SIGINT, SIGTERM }; sigset_t Application::signalSet; @@ -49,6 +51,7 @@ Ice::Application::main(int argc, char* argv[], const char* configFile) return EXIT_FAILURE; } + Application::_interrupted = false; _appName = argv[0]; int status; @@ -147,6 +150,8 @@ Ice::Application::communicator() BOOL WINAPI Ice::interruptHandler(DWORD) { + Application::_interrupted = true; + // // Don't use Application::communicator(), this is not signal-safe. // @@ -231,6 +236,8 @@ Ice::Application::releaseInterrupt() void Ice::interruptHandler(int) { + Application::_interrupted = true; + // // Don't use Application::communicator(), this is not signal-safe. // @@ -293,3 +300,9 @@ Ice::Application::releaseInterrupt() } #endif + +bool +Ice::Application::interrupted() +{ + return Application::_interrupted; +} |