Index: faxd/pageSendApp.c++
--- faxd/pageSendApp.c++.orig
+++ faxd/pageSendApp.c++
@@ -49,7 +49,6 @@
  */
 
 pageSendApp* pageSendApp::_instance = NULL;
-int pageSendApp::terminateSignal = 0;
 
 pageSendApp::pageSendApp(const fxStr& devName, const fxStr& devID)
     : ModemServer(devName, devID)
@@ -1401,19 +1400,13 @@ usage(const char* appName)
 static void
 sigCleanup(int s)
 {
-    // We keep this simple to avoid deadlocks - see terminate() for actual work
+    int old_errno = errno;
     signal(s, fxSIGHANDLER(sigCleanup));
-    pageSendApp::terminateSignal = s;
-}
-
-static void
-terminate(int s)
-{
-    signal(s, fxSIGHANDLER(sigCleanup));
     logError("CAUGHT SIGNAL %d", s);
     pageSendApp::instance().close();
     if (!pageSendApp::instance().isRunning())
 	_exit(send_failed);
+    errno = old_errno;
 }
 
 int
@@ -1443,11 +1436,8 @@ main(int argc, char** argv)
 
     app->initialize(argc, argv);
     app->open();
-    while (app->isRunning() && !app->isReady()) {
+    while (app->isRunning() && !app->isReady())
 	Dispatcher::instance().dispatch();
-	if (pageSendApp::terminateSignal)
-	    terminate(pageSendApp::terminateSignal);
-    }
     FaxSendStatus status;
     if (app->isReady())
 	status = app->send((const char**)&argv[optind], argc - optind);
