소스 검색

Alternative method.

pull/102/head
Shane Mc Cormack 8 년 전
부모
커밋
4f8a72a145
1개의 변경된 파일34개의 추가작업 그리고 34개의 파일을 삭제
  1. 34
    34
      irc/src/com/dmdirc/parser/irc/IRCParser.java

+ 34
- 34
irc/src/com/dmdirc/parser/irc/IRCParser.java 파일 보기

@@ -231,8 +231,8 @@ public class IRCParser extends BaseSocketAwareParser implements SecureParser, En
231 231
     private final Map<String, CapabilityState> capabilities = new HashMap<>();
232 232
     /** Handler for whois responses. */
233 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 238
      * Default constructor, ServerInfo and MyInfo need to be added separately (using IRC.me and IRC.server).
@@ -594,9 +594,9 @@ public class IRCParser extends BaseSocketAwareParser implements SecureParser, En
594 594
     protected void callSocketClosed() {
595 595
         // Don't allow state resetting whilst there may be handlers requiring
596 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,38 +649,38 @@ public class IRCParser extends BaseSocketAwareParser implements SecureParser, En
649 649
     //---------------------------------------------------------------------------
650 650
     /** Reset internal state (use before doConnect). */
651 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…
취소
저장