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();
}
});