You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ma...@apache.org on 2007/09/21 15:55:11 UTC

svn commit: r578111 - in /mina/trunk: core/src/main/java/org/apache/mina/common/ core/src/main/java/org/apache/mina/transport/socket/nio/ example/src/main/java/org/apache/mina/example/chat/client/

Author: maarten
Date: Fri Sep 21 06:55:10 2007
New Revision: 578111

URL: http://svn.apache.org/viewvc?rev=578111&view=rev
Log:
resolved DIRMINA-443 : SocketConnector cannot be manually closed

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
    mina/trunk/example/src/main/java/org/apache/mina/example/chat/client/SwingChatClient.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java?rev=578111&r1=578110&r2=578111&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java Fri Sep 21 06:55:10 2007
@@ -40,6 +40,7 @@
     private final Object lock = new Object();
     private final String threadName;
     private final Executor executor;
+    private boolean closeFlag;
 
     private final Queue<AbstractIoSession> newSessions =
         new ConcurrentLinkedQueue<AbstractIoSession>();
@@ -132,6 +133,10 @@
 
     protected abstract long transferFile(IoSession session, FileRegion region) throws Exception;
 
+    public void close(){
+        closeFlag = true;
+    }
+    
     public void add(IoSession session) {
         newSessions.add((AbstractIoSession) session);
         startupWorker();
@@ -579,6 +584,12 @@
                 try {
                     boolean selected=select(1000);
 
+                    if (closeFlag){
+                        synchronized (lock) {
+                            worker = null;
+                            break;
+                        }
+                    }
                     nSessions += add();
                     updateTrafficMask();
 

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java?rev=578111&r1=578110&r2=578111&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java Fri Sep 21 06:55:10 2007
@@ -79,6 +79,8 @@
 
     private int workerTimeout = 60; // 1 min.
 
+    private boolean closeFlag;
+
     /**
      * Create a connector with a single processing thread using a NewThreadExecutor
      */
@@ -155,6 +157,14 @@
         this.workerTimeout = workerTimeout;
     }
 
+    public void close(){
+        closeFlag = true;
+        selector.wakeup();
+        for (NioProcessor ioProcessor : ioProcessors) {
+          ioProcessor.close();
+        }
+    }
+
     @Override
     protected ConnectFuture doConnect(SocketAddress remoteAddress,
                                       SocketAddress localAddress) {
@@ -307,6 +317,13 @@
             for (; ;) {
                 try {
                     int nKeys = selector.select(1000);
+
+                    if (closeFlag){
+                        synchronized (lock) {
+                            worker = null;
+                            break;
+                        }
+                    }
 
                     registerNew();
 

Modified: mina/trunk/example/src/main/java/org/apache/mina/example/chat/client/SwingChatClient.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/chat/client/SwingChatClient.java?rev=578111&r1=578110&r2=578111&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/chat/client/SwingChatClient.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/chat/client/SwingChatClient.java Fri Sep 21 06:55:10 2007
@@ -141,6 +141,8 @@
 
         closeButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
+                client.quit();
+                connector.close(); 
                 dispose();
             }
         });