diff options
Diffstat (limited to 'cpp/src/slice2rb/Main.cpp')
-rw-r--r-- | cpp/src/slice2rb/Main.cpp | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/cpp/src/slice2rb/Main.cpp b/cpp/src/slice2rb/Main.cpp index da01726693a..32f7e83ace7 100644 --- a/cpp/src/slice2rb/Main.cpp +++ b/cpp/src/slice2rb/Main.cpp @@ -9,9 +9,10 @@ #include <IceUtil/DisableWarnings.h> #include <IceUtil/Options.h> +#include <IceUtil/CtrlCHandler.h> +#include <IceUtil/StaticMutex.h> #include <Slice/Preprocessor.h> #include <Slice/RubyUtil.h> -#include <Slice/SignalHandler.h> #include <fstream> @@ -30,14 +31,15 @@ using namespace std; using namespace Slice; using namespace Slice::Ruby; -// -// Callback for Crtl-C signal handling -// -static IceUtilInternal::Output _out; +static IceUtil::StaticMutex _mutex = ICE_STATIC_MUTEX_INITIALIZER; +static bool _interrupted = false; -static void closeCallback() +void +interruptedCallback(int signal) { - _out.close(); + IceUtil::StaticMutex::Lock lock(_mutex); + + _interrupted = true; } void @@ -146,9 +148,11 @@ main(int argc, char* argv[]) int status = EXIT_SUCCESS; + IceUtil::CtrlCHandler ctrlCHandler; + ctrlCHandler.setCallback(interruptedCallback); + for(i = args.begin(); i != args.end(); ++i) { - SignalHandler sigHandler; Preprocessor icecpp(argv[0], *i, cppArgs); FILE* cppHandle = icecpp.preprocess(false); @@ -202,32 +206,38 @@ main(int argc, char* argv[]) { file = output + '/' + file; } - SignalHandler::addFile(file); - - SignalHandler::setCallback(closeCallback); - _out.open(file.c_str()); - if(!_out) + IceUtilInternal::Output out; + out.open(file.c_str()); + if(!out) { cerr << argv[0] << ": can't open `" << file << "' for writing" << endl; u->destroy(); return EXIT_FAILURE; } - printHeader(_out); - _out << "\n# Generated from file `" << base << ".ice'\n"; + printHeader(out); + out << "\n# Generated from file `" << base << ".ice'\n"; // // Generate the Ruby mapping. // - generate(u, all, checksum, includePaths, _out); + generate(u, all, checksum, includePaths, out); - _out.close(); - SignalHandler::setCallback(0); + out.close(); } u->destroy(); } + + { + IceUtil::StaticMutex::Lock lock(_mutex); + + if(_interrupted) + { + return EXIT_FAILURE; + } + } } return status; |