Implement java interface for RS shutdown and fix shutdown deadlock with the command fifo.
diff --git a/rsLocklessFifo.cpp b/rsLocklessFifo.cpp
index c3fee54..0c40389 100644
--- a/rsLocklessFifo.cpp
+++ b/rsLocklessFifo.cpp
@@ -25,6 +25,16 @@
 
 LocklessCommandFifo::~LocklessCommandFifo()
 {
+    if (!mInShutdown) {
+        shutdown();
+    }
+    free(mBuffer);
+}
+
+void LocklessCommandFifo::shutdown()
+{
+    mInShutdown = true;
+    mSignalToWorker.set();
 }
 
 bool LocklessCommandFifo::init(uint32_t sizeInBytes)
@@ -42,6 +52,7 @@
         return false;
     }
 
+    mInShutdown = false;
     mSize = sizeInBytes;
     mPut = mBuffer;
     mGet = mBuffer;
@@ -50,7 +61,7 @@
     return true;
 }
 
-uint32_t LocklessCommandFifo::getFreeSpace() const 
+uint32_t LocklessCommandFifo::getFreeSpace() const
 {
     int32_t freeSpace = 0;
     //dumpState("getFreeSpace");
@@ -115,7 +126,7 @@
 {
     while(1) {
         //dumpState("get");
-        while(isEmpty()) {
+        while(isEmpty() && !mInShutdown) {
             mSignalToControl.set();
             mSignalToWorker.wait();
         }
@@ -126,7 +137,7 @@
             // non-zero command is valid
             return mGet+4;
         }
-    
+
         // zero command means reset to beginning.
         mGet = mBuffer;
     }
@@ -161,7 +172,7 @@
     while(getFreeSpace() < bytes) {
         sleep(1);
     }
-    
+
 }
 
 void LocklessCommandFifo::dumpState(const char *s) const