From e99b1261340d47538818ee8573bb6e55e79257e8 Mon Sep 17 00:00:00 2001
From: Stephen Birarda <commit@birarda.com>
Date: Thu, 5 Dec 2013 17:35:26 -0800
Subject: [PATCH] remove quickExit option from AS, fix cleanup in DS

---
 animation-server/src/AnimationServer.cpp |  8 +-------
 animation-server/src/AnimationServer.h   |  2 +-
 domain-server/src/DomainServer.cpp       | 16 ++++++++++------
 domain-server/src/DomainServer.h         |  3 +--
 4 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/animation-server/src/AnimationServer.cpp b/animation-server/src/AnimationServer.cpp
index ede205ce90..8ae54c4963 100644
--- a/animation-server/src/AnimationServer.cpp
+++ b/animation-server/src/AnimationServer.cpp
@@ -804,11 +804,6 @@ AnimationServer::AnimationServer(int &argc, char **argv) :
     printf("PROCESSING_FPS=%d\n",PROCESSING_FPS);
     printf("PROCESSING_INTERVAL_USECS=%d\n",PROCESSING_INTERVAL_USECS);
     
-    if (cmdOptionExists(argc, (const char**) argv, "--quickExit")) {
-        qDebug() << "quick exit asked for\n";
-        quit();
-    }
-    
     nodeList->linkedDataCreateCallback = NULL; // do we need a callback?
     
     // Create our JurisdictionListener so we'll know where to send edit packets
@@ -869,8 +864,7 @@ void AnimationServer::readPendingDatagrams() {
     }
 }
 
-void AnimationServer::exit(int returnCode) {
-    qDebug() << "AS exit called!\n";
+AnimationServer::~AnimationServer() {
     pthread_join(animateVoxelThread, NULL);
     
     if (::jurisdictionListener) {
diff --git a/animation-server/src/AnimationServer.h b/animation-server/src/AnimationServer.h
index 59b247f9cf..cda5f8fb24 100644
--- a/animation-server/src/AnimationServer.h
+++ b/animation-server/src/AnimationServer.h
@@ -15,7 +15,7 @@ class AnimationServer : public QCoreApplication {
     Q_OBJECT
 public:
     AnimationServer(int &argc, char **argv);
-    void exit(int retCode = 0);
+    ~AnimationServer();
 private slots:
     void readPendingDatagrams();
 };
diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp
index bf5a7db16d..a4806ed8c7 100644
--- a/domain-server/src/DomainServer.cpp
+++ b/domain-server/src/DomainServer.cpp
@@ -22,6 +22,12 @@
 
 const int RESTART_HOLD_TIME_MSECS = 5 * 1000;
 
+void signalhandler(int sig){
+    if (sig == SIGINT) {
+        qApp->quit();
+    }
+}
+
 DomainServer* DomainServer::domainServerInstance = NULL;
 
 DomainServer::DomainServer(int argc, char* argv[]) :
@@ -35,6 +41,8 @@ DomainServer::DomainServer(int argc, char* argv[]) :
 {
     DomainServer::setDomainServerInstance(this);
     
+    signal(SIGINT, signalhandler);
+    
     const char CUSTOM_PORT_OPTION[] = "-p";
     const char* customPortString = getCmdOption(argc, (const char**) argv, CUSTOM_PORT_OPTION);
     unsigned short domainServerPort = customPortString ? atoi(customPortString) : DEFAULT_DOMAIN_SERVER_PORT;
@@ -88,10 +96,8 @@ DomainServer::DomainServer(int argc, char* argv[]) :
     
     // fire a single shot timer to add static assignments back into the queue after a restart
     QTimer::singleShot(RESTART_HOLD_TIME_MSECS, this, SLOT(addStaticAssignmentsBackToQueueAfterRestart()));
-}
-
-void DomainServer::exit(int retCode) {
-    cleanup();
+    
+    connect(this, SIGNAL(aboutToQuit()), SLOT(cleanup()));
 }
 
 void DomainServer::readAvailableDatagrams() {
@@ -774,8 +780,6 @@ void DomainServer::addStaticAssignmentsBackToQueueAfterRestart() {
 }
 
 void DomainServer::cleanup() {
-    qDebug() << "cleanup called!\n";
-    
     _staticAssignmentFile.unmap(_staticAssignmentFileData);
     _staticAssignmentFile.close();
 }
\ No newline at end of file
diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h
index 1ca8fb6936..e6047fed9a 100644
--- a/domain-server/src/DomainServer.h
+++ b/domain-server/src/DomainServer.h
@@ -50,8 +50,6 @@ private:
                                             const QUuid& checkInUUI);
     void addReleasedAssignmentBackToQueue(Assignment* releasedAssignment);
     
-    void cleanup();
-    
     unsigned char* addNodeToBroadcastPacket(unsigned char* currentPosition, Node* nodeToAdd);
     
     QMutex _assignmentQueueMutex;
@@ -69,6 +67,7 @@ private:
 private slots:
     void readAvailableDatagrams();
     void addStaticAssignmentsBackToQueueAfterRestart();
+    void cleanup();
 };
 
 #endif /* defined(__hifi__DomainServer__) */