diff options
Diffstat (limited to 'cpp/demo/Freeze/library/Collocated.cpp')
-rw-r--r-- | cpp/demo/Freeze/library/Collocated.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/cpp/demo/Freeze/library/Collocated.cpp b/cpp/demo/Freeze/library/Collocated.cpp index 4283dce2ef8..2d6fceb20e2 100644 --- a/cpp/demo/Freeze/library/Collocated.cpp +++ b/cpp/demo/Freeze/library/Collocated.cpp @@ -24,6 +24,7 @@ public: } virtual int run(int argc, char* argv[]); + virtual void interruptCallback(int); private: @@ -40,6 +41,12 @@ main(int argc, char* argv[]) int LibraryCollocated::run(int argc, char* argv[]) { + // + // Since this is an interactive demo we want the custom interrupt + // callback to be called when the process is interrupted. + // + userCallbackOnInterrupt(); + Ice::PropertiesPtr properties = communicator()->getProperties(); // @@ -84,3 +91,21 @@ LibraryCollocated::run(int argc, char* argv[]) return status; } + +void +LibraryCollocated::interruptCallback(int) +{ + try + { + communicator()->destroy(); + } + catch(const IceUtil::Exception& ex) + { + cerr << appName() << ": " << ex << endl; + } + catch(...) + { + cerr << appName() << ": unknown exception" << endl; + } + exit(EXIT_SUCCESS); +} |