Browse Source

Alternative method.

pull/102/head
Shane Mc Cormack 8 years ago
parent
commit
4f8a72a145
1 changed files with 34 additions and 34 deletions
  1. 34
    34
      irc/src/com/dmdirc/parser/irc/IRCParser.java

+ 34
- 34
irc/src/com/dmdirc/parser/irc/IRCParser.java View File

231
     private final Map<String, CapabilityState> capabilities = new HashMap<>();
231
     private final Map<String, CapabilityState> capabilities = new HashMap<>();
232
     /** Handler for whois responses. */
232
     /** Handler for whois responses. */
233
     private final WhoisResponseHandler whoisHandler;
233
     private final WhoisResponseHandler whoisHandler;
234
-    /** Semaphore for calls to resetState. */
235
-    private final Semaphore resetStateSem = new Semaphore(1);
234
+    /** Used to synchronize calls to resetState. */
235
+    private final Object resetStateSync = new Object();
236
 
236
 
237
     /**
237
     /**
238
      * Default constructor, ServerInfo and MyInfo need to be added separately (using IRC.me and IRC.server).
238
      * Default constructor, ServerInfo and MyInfo need to be added separately (using IRC.me and IRC.server).
594
     protected void callSocketClosed() {
594
     protected void callSocketClosed() {
595
         // Don't allow state resetting whilst there may be handlers requiring
595
         // Don't allow state resetting whilst there may be handlers requiring
596
         // state.
596
         // state.
597
-        resetStateSem.acquireUninterruptibly();
598
-        getCallbackManager().publish(new SocketCloseEvent(this, new Date()));
599
-        resetStateSem.release();
597
+        synchronized (resetStateSync) {
598
+            getCallbackManager().publish(new SocketCloseEvent(this, new Date()));
599
+        }
600
     }
600
     }
601
 
601
 
602
     /**
602
     /**
649
     //---------------------------------------------------------------------------
649
     //---------------------------------------------------------------------------
650
     /** Reset internal state (use before doConnect). */
650
     /** Reset internal state (use before doConnect). */
651
     private void resetState() {
651
     private void resetState() {
652
-        resetStateSem.acquireUninterruptibly();
653
-        // Reset General State info
654
-        got001 = false;
655
-        post005 = false;
656
-        // Clear the hash tables
657
-        channelList.clear();
658
-        clientList.clear();
659
-        h005Info.clear();
660
-        prefixModes.clear();
661
-        chanModesOther.clear();
662
-        chanModesBool.clear();
663
-        userModes.clear();
664
-        chanPrefix = DEFAULT_CHAN_PREFIX;
665
-        // Clear output queue.
666
-        if (out != null) {
667
-            out.clearQueue();
668
-        }
669
-        setServerName("");
670
-        networkName = "";
671
-        lastLine = null;
672
-        myself = new IRCClientInfo(this, userModes, "myself").setFake(true);
652
+        synchronized (resetStateSync) {
653
+            // Reset General State info
654
+            got001 = false;
655
+            post005 = false;
656
+            // Clear the hash tables
657
+            channelList.clear();
658
+            clientList.clear();
659
+            h005Info.clear();
660
+            prefixModes.clear();
661
+            chanModesOther.clear();
662
+            chanModesBool.clear();
663
+            userModes.clear();
664
+            chanPrefix = DEFAULT_CHAN_PREFIX;
665
+            // Clear output queue.
666
+            if (out != null) {
667
+                out.clearQueue();
668
+            }
669
+            setServerName("");
670
+            networkName = "";
671
+            lastLine = null;
672
+            myself = new IRCClientInfo(this, userModes, "myself").setFake(true);
673
 
673
 
674
-        synchronized (serverInformationLines) {
675
-            serverInformationLines.clear();
676
-        }
677
-        stopPingTimer();
674
+            synchronized (serverInformationLines) {
675
+                serverInformationLines.clear();
676
+            }
677
+            stopPingTimer();
678
 
678
 
679
-        currentSocketState = SocketState.CLOSED;
680
-        setEncoding(IRCEncoding.RFC1459);
679
+            currentSocketState = SocketState.CLOSED;
680
+            setEncoding(IRCEncoding.RFC1459);
681
 
681
 
682
-        whoisHandler.stop();
683
-        resetStateSem.release();
682
+            whoisHandler.stop();
683
+        }
684
     }
684
     }
685
 
685
 
686
     /**
686
     /**

Loading…
Cancel
Save