summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/SignalHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Slice/SignalHandler.cpp')
-rw-r--r--cpp/src/Slice/SignalHandler.cpp79
1 files changed, 37 insertions, 42 deletions
diff --git a/cpp/src/Slice/SignalHandler.cpp b/cpp/src/Slice/SignalHandler.cpp
index fa693d88db7..8fd0261da42 100644
--- a/cpp/src/Slice/SignalHandler.cpp
+++ b/cpp/src/Slice/SignalHandler.cpp
@@ -7,66 +7,61 @@
//
// **********************************************************************
-#include <IceUtil/DisableWarnings.h>
#include <Slice/SignalHandler.h>
-#include <vector>
-#include <cstdlib>
+#include <IceUtil/StaticMutex.h>
+#include <map>
-#ifndef _WIN32
-# include <signal.h>
-#endif
-
-
-using namespace std;
using namespace Slice;
+using namespace IceUtil;
+using namespace IceUtilInternal;
+using namespace std;
-//
-// Signal handler routine to unlink output files in case of translator
-// being interrupted.
-//
+static StaticMutex _mutex = ICE_STATIC_MUTEX_INITIALIZER;
+
+static SignalHandlerCloseCallback _callback = 0;
static vector<string> _fileList;
-#ifdef _WIN32
-static BOOL WINAPI signalHandler(DWORD dwCtrlType)
-#else
-static void signalHandler(int signal)
-#endif
+void
+SignalHandler::addFileForCleanup(const string& file)
{
- for(unsigned int i = 0; i < _fileList.size(); ++i)
- {
- remove(_fileList[i].c_str());
- }
+ StaticMutex::Lock lock(_mutex);
- exit(1);
+cout << "Adding " << file << endl;
+ _fileList.push_back(file);
}
-
-Slice::SignalHandler::SignalHandler()
+void
+SignalHandler::setCloseCallback(Slice::SignalHandlerCloseCallback callback)
{
-#ifdef _WIN32
- SetConsoleCtrlHandler(signalHandler, TRUE);
-#else
- sigset(SIGHUP, signalHandler);
- sigset(SIGINT, signalHandler);
- sigset(SIGQUIT, signalHandler);
-#endif
+ _callback = callback;
}
-Slice::SignalHandler::~SignalHandler()
+void
+SignalHandler::clearCleanupFileList()
{
-#ifdef _WIN32
- SetConsoleCtrlHandler(signalHandler, FALSE);
-#else
- sigset(SIGHUP, SIG_DFL);
- sigset(SIGINT, SIG_DFL);
- sigset(SIGQUIT, SIG_DFL);
-#endif
+ StaticMutex::Lock lock(_mutex);
+cout << "Clearing files" << endl;
_fileList.clear();
+ _callback = 0;
}
void
-Slice::SignalHandler::addFile(const string& file)
+SignalHandler::removeFilesOnInterrupt(int signal)
{
- _fileList.push_back(file);
+ StaticMutex::Lock lock(_mutex);
+
+cout << "Removing files" << endl;
+ if(_callback != 0)
+ {
+ _callback();
+ }
+
+ for(unsigned int i = 0; i < _fileList.size(); ++i)
+ {
+cout << " Removing " << _fileList[i] << endl;
+ remove(_fileList[i].c_str());
+ }
+
+ exit(1);
}