summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/JavaUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Slice/JavaUtil.cpp')
-rw-r--r--cpp/src/Slice/JavaUtil.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/cpp/src/Slice/JavaUtil.cpp b/cpp/src/Slice/JavaUtil.cpp
index cb4874a2df8..2c8cfde1458 100644
--- a/cpp/src/Slice/JavaUtil.cpp
+++ b/cpp/src/Slice/JavaUtil.cpp
@@ -27,6 +27,20 @@ using namespace Slice;
using namespace IceUtil;
using namespace IceUtilInternal;
+//
+// Callback for Crtl-C signal handling
+//
+static Slice::JavaGenerator* _javaGen = 0;
+
+static void closeCallback()
+{
+ if(_javaGen != 0)
+ {
+ _javaGen->close();
+ }
+}
+
+
Slice::JavaOutput::JavaOutput()
{
}
@@ -160,6 +174,7 @@ Slice::JavaGenerator::JavaGenerator(const string& dir) :
_dir(dir),
_out(0)
{
+ SignalHandler::setCallback(closeCallback);
}
Slice::JavaGenerator::JavaGenerator(const string& dir, Slice::FeatureProfile profile) :
@@ -183,6 +198,7 @@ Slice::JavaGenerator::open(const string& absolute)
if(out->openClass(absolute, _dir))
{
_out = out;
+ _javaGen = this; // For Ctrl-C handling
}
else
{
@@ -199,6 +215,7 @@ Slice::JavaGenerator::close()
*_out << nl;
delete _out;
_out = 0;
+ _javaGen = 0; // For Ctrl-C handling
}
Output&