attempt to fix occasional backupSessionFile exception.
[vamsas.git] / src / uk / ac / vamsas / client / simpleclient / SimplePickManager.java
index 7b33f48..5f92d37 100644 (file)
@@ -33,6 +33,10 @@ public class SimplePickManager implements IPickManager {
    */\r
   private boolean passThru=true;\r
   /**\r
+   * internal flag - set to true to sleep until passThru is true before passing on a message\r
+   */\r
+  private boolean qUEUE=false;\r
+  /**\r
    * the client apps message handler\r
    */\r
   IMessageHandler pickHandler=null;\r
@@ -41,21 +45,26 @@ public class SimplePickManager implements IPickManager {
     \r
   }\r
 \r
-  public void sendMessage(Message message) {\r
-    manager.sendMessage(message);\r
+  public synchronized void sendMessage(Message message) {\r
+    // throw away messages whilst we block\r
+    if (passThru && manager!=null)\r
+      manager.sendMessage(message);\r
   }\r
   /**\r
    * pass message onto the Apps handler, or wait until\r
    * passThru is true before passing message on.\r
    * @param message\r
    */\r
-  protected void handleMessage(Message message) {\r
-    while (!passThru) {\r
+  protected synchronized void handleMessage(Message message) {\r
+    if (qUEUE) {\r
+     while (!passThru && manager!=null) {\r
+      log.debug("Not passing through.");\r
       try {\r
         Thread.sleep(5);\r
       } catch (InterruptedException e) {};\r
+    } \r
     }\r
-    if (passThru)\r
+    if (passThru && manager!=null)\r
       pickHandler.handleMessage(message);\r
   }\r
 \r
@@ -72,9 +81,14 @@ public class SimplePickManager implements IPickManager {
   public void setPassThru(boolean passThru) {\r
     this.passThru = passThru;\r
   }\r
-  public void haltPickManager() {\r
-      // TODO: FIX haltPickManager to cleanly end after SimpleClient.finalize() is called\r
-      manager.haltManager();\r
-      \r
+  /**\r
+   * shutdown the pickmanager and remove all references to it\r
+   */\r
+  public void shutdown() {\r
+    passThru=false;\r
+    manager.registerMessageHandler(null);\r
+    SocketManager dying = manager;\r
+    manager=null;\r
+       dying.shutdown();\r
   }\r
 }\r