vnc: Add shutdown signal handler
diff --git a/src/VNCFlinger.cpp b/src/VNCFlinger.cpp
index 37a8614..d1670ce 100644
--- a/src/VNCFlinger.cpp
+++ b/src/VNCFlinger.cpp
@@ -47,10 +47,26 @@
 
     rfbRunEventLoop(mVNCScreen, -1, true);
 
-    ALOGD("VNCFlinger is running!");
+    ALOGD("VNCFlinger ready to fling");
 
     eventLoop();
 
+    ALOGI("VNCFlinger has left the building");
+
+    return NO_ERROR;
+}
+
+status_t VNCFlinger::stop() {
+    Mutex::Autolock _L(mEventMutex);
+
+    ALOGV("Shutting down");
+
+    destroyVirtualDisplayLocked();
+    mClientCount = 0;
+    mRunning = false;
+
+    mEventCond.signal();
+
     return NO_ERROR;
 }
 
@@ -115,6 +131,10 @@
 }
 
 status_t VNCFlinger::destroyVirtualDisplayLocked() {
+    if (!mVDSActive) {
+        return NO_INIT;
+    }
+
     mCpuConsumer.clear();
     mProducer.clear();
     SurfaceComposerClient::destroyDisplay(mDpy);
@@ -163,17 +183,6 @@
     return err;
 }
 
-status_t VNCFlinger::stop() {
-    Mutex::Autolock _L(mEventMutex);
-
-    mClientCount = 0;
-    mRunning = false;
-
-    mEventCond.signal();
-
-    return NO_ERROR;
-}
-
 size_t VNCFlinger::addClient() {
     Mutex::Autolock _l(mEventMutex);
     if (mClientCount == 0) {