You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/11/15 16:02:42 UTC

svn commit: r344372 - in /directory/network/trunk/src/java/org/apache/mina/transport: socket/nio/support/DatagramSessionImpl.java socket/nio/support/SocketSessionImpl.java vmpipe/support/VmPipeSessionImpl.java

Author: trustin
Date: Tue Nov 15 07:02:37 2005
New Revision: 344372

URL: http://svn.apache.org/viewcvs?rev=344372&view=rev
Log:
Introduced thread safety for close(), write(), and isClosing()

Modified:
    directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
    directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java
    directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java

Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?rev=344372&r1=344371&r2=344372&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java Tue Nov 15 07:02:37 2005
@@ -45,21 +45,14 @@
 class DatagramSessionImpl extends BaseIoSession implements DatagramSession
 {
     private final IoSessionManagerFilterChain managerFilterChain;
-    
     private final IoSessionFilterChain filterChain;
-
     private final DatagramChannel ch;
-
     private final Queue writeRequestQueue;
-
     private final IoHandler handler;
-
     private final SocketAddress localAddress;
-
+    private final Object ioLock = new Object();
     private SocketAddress remoteAddress;
-
     private SelectionKey key;
-    
     private final CloseFuture closeFuture = new CloseFuture();
     private boolean closing;
 
@@ -115,17 +108,23 @@
     
     public CloseFuture close()
     {
-        if( !closing && !closeFuture.isReady() )
+        synchronized( ioLock )
         {
-            closing = true;
-            managerFilterChain.filterClose( this, closeFuture );
+            if( !closing )
+            {
+                closing = true;
+                managerFilterChain.filterClose( this, closeFuture );
+            }
         }
         return closeFuture;
     }
     
     public boolean isClosing()
     {
-        return closing;
+        synchronized( ioLock )
+        {
+            return closing;
+        }
     }
 
     Queue getWriteRequestQueue()
@@ -136,13 +135,16 @@
     public WriteFuture write( Object message )
     {
         WriteFuture future = new WriteFuture();
-        if( isClosing() )
-        {
-            future.setWritten( false );
-        }
-        else
+        synchronized( ioLock )
         {
-            filterChain.filterWrite( this, new WriteRequest( message, future ) );
+            if( isClosing() )
+            {
+                future.setWritten( false );
+            }
+            else
+            {
+                filterChain.filterWrite( this, new WriteRequest( message, future ) );
+            }
         }
         return future;
     }

Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java?rev=344372&r1=344371&r2=344372&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java Tue Nov 15 07:02:37 2005
@@ -54,6 +54,7 @@
     private final IoHandler handler;
     private final SocketAddress remoteAddress;
     private final SocketAddress localAddress;
+    private final Object ioLock = new Object();
     private SelectionKey key;
     private CloseFuture closeFuture = new CloseFuture();
     private boolean closing;
@@ -119,10 +120,13 @@
     
     public CloseFuture close()
     {
-        if( !closing && !closeFuture.isReady() )
+        synchronized( ioLock )
         {
-            closing = true;
-            filterChain.filterClose( this, closeFuture );
+            if( !closing )
+            {
+                closing = true;
+                filterChain.filterClose( this, closeFuture );
+            }
         }
 
         return closeFuture;
@@ -130,7 +134,10 @@
     
     public boolean isClosing()
     {
-        return closing;
+        synchronized( ioLock )
+        {
+            return closing;
+        }
     }
 
     Queue getWriteRequestQueue()
@@ -149,13 +156,16 @@
     public WriteFuture write( Object message )
     {
         WriteFuture future = new WriteFuture();
-        if( isClosing() )
-        {
-            future.setWritten( false );
-        }
-        else
+        synchronized( ioLock )
         {
-            filterChain.filterWrite( this, new WriteRequest( message, future ) );
+            if( isClosing() )
+            {
+                future.setWritten( false );
+            }
+            else
+            {
+                filterChain.filterWrite( this, new WriteRequest( message, future ) );
+            }
         }
         return future;
     }

Modified: directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java?rev=344372&r1=344371&r2=344372&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java Tue Nov 15 07:02:37 2005
@@ -29,19 +29,13 @@
 public class VmPipeSessionImpl extends BaseIoSession implements VmPipeSession
 {
     private final SocketAddress localAddress;
-
     private final SocketAddress remoteAddress;
-
     private final IoHandler handler;
-    
     private final IoSessionFilterChain filterChain;
-    
     private final VmPipeSessionManagerFilterChain managerFilterChain;
-
+    private final Object ioLock = new Object();
     final VmPipeSessionImpl remoteSession;
-
     final Object lock;
-
     private boolean closing;
     CloseFuture closeFuture = new CloseFuture();
 
@@ -130,31 +124,39 @@
 
     public CloseFuture close()
     {
-        if( !closing )
+        synchronized( ioLock )
         {
-            closing = true;
-            managerFilterChain.filterClose( this, closeFuture );
+            if( !closing )
+            {
+                closing = true;
+                managerFilterChain.filterClose( this, closeFuture );
+            }
         }
-            
         return closeFuture;
     }
     
     public boolean isClosing()
     {
-        return closing;
+        synchronized( ioLock )
+        {
+            return closing;
+        }
     }
     
 
     public WriteFuture write( Object message )
     {
         WriteFuture future = new WriteFuture();
-        if( isClosing() )
-        {
-            future.setWritten( false );
-        }
-        else
+        synchronized( ioLock )
         {
-            this.filterChain.filterWrite( this, new WriteRequest( message, future ) );
+            if( isClosing() )
+            {
+                future.setWritten( false );
+            }
+            else
+            {
+                this.filterChain.filterWrite( this, new WriteRequest( message, future ) );
+            }
         }
         return future;
     }