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/05/30 13:46:52 UTC
svn commit: r179047 - in /directory/network: branches/0.7/project.xml
branches/0.7/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
trunk/src/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
Author: trustin
Date: Mon May 30 04:46:50 2005
New Revision: 179047
URL: http://svn.apache.org/viewcvs?rev=179047&view=rev
Log:
Fixed: DIRMINA-47
Modified:
directory/network/branches/0.7/project.xml
directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
Modified: directory/network/branches/0.7/project.xml
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/project.xml?rev=179047&r1=179046&r2=179047&view=diff
==============================================================================
--- directory/network/branches/0.7/project.xml (original)
+++ directory/network/branches/0.7/project.xml Mon May 30 04:46:50 2005
@@ -154,9 +154,7 @@
<report>maven-changes-plugin</report>
<report>maven-jxr-plugin</report>
<report>maven-junit-report-plugin</report>
- <!-- Test fails if enabled.
<report>maven-emma-plugin</report>
- -->
<report>maven-jdepend-plugin</report>
<report>maven-simian-plugin</report>
<report>maven-tasklist-plugin</report>
Modified: directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketIoProcessor.java?rev=179047&r1=179046&r2=179047&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketIoProcessor.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketIoProcessor.java Mon May 30 04:46:50 2005
@@ -190,7 +190,16 @@
SocketChannel ch = session.getChannel();
SelectionKey key = session.getSelectionKey();
- if( !key.isValid() ) // skip if channel is already closed
+ // Retry later if session is not yet fully initialized.
+ // (In case that Session.close() is called before addSession() is processed)
+ if( key == null )
+ {
+ scheduleRemove( session );
+ break;
+ }
+
+ // skip if channel is already closed
+ if( !key.isValid() )
{
continue;
}
@@ -366,6 +375,7 @@
{
if( writeTimeout > 0
&& ( currentTime - lastIoTime ) >= writeTimeout
+ && session.getSelectionKey() != null
&& ( session.getSelectionKey().interestOps() & SelectionKey.OP_WRITE ) != 0 )
{
session
@@ -397,14 +407,25 @@
continue;
}
- try
+ // If encountered write request before session is initialized,
+ // (In case that Session.write() is called before addSession() is processed)
+ if( session.getSelectionKey() == null )
{
- flush( session );
+ // Reschedule for later write
+ scheduleFlush( session );
+ break;
}
- catch( IOException e )
+ else
{
- scheduleRemove( session );
- session.getManagerFilterChain().exceptionCaught( session, e );
+ try
+ {
+ flush( session );
+ }
+ catch( IOException e )
+ {
+ scheduleRemove( session );
+ session.getManagerFilterChain().exceptionCaught( session, e );
+ }
}
}
}
@@ -553,4 +574,4 @@
}
}
}
-}
\ No newline at end of file
+}
Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?rev=179047&r1=179046&r2=179047&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java Mon May 30 04:46:50 2005
@@ -190,7 +190,16 @@
SocketChannel ch = session.getChannel();
SelectionKey key = session.getSelectionKey();
- if( !key.isValid() ) // skip if channel is already closed
+ // Retry later if session is not yet fully initialized.
+ // (In case that Session.close() is called before addSession() is processed)
+ if( key == null )
+ {
+ scheduleRemove( session );
+ break;
+ }
+
+ // skip if channel is already closed
+ if( !key.isValid() )
{
continue;
}
@@ -366,6 +375,7 @@
{
if( writeTimeout > 0
&& ( currentTime - lastIoTime ) >= writeTimeout
+ && session.getSelectionKey() != null
&& ( session.getSelectionKey().interestOps() & SelectionKey.OP_WRITE ) != 0 )
{
session
@@ -396,15 +406,26 @@
releaseWriteBuffers( session );
continue;
}
-
- try
+
+ // If encountered write request before session is initialized,
+ // (In case that Session.write() is called before addSession() is processed)
+ if( session.getSelectionKey() == null )
{
- flush( session );
+ // Reschedule for later write
+ scheduleFlush( session );
+ break;
}
- catch( IOException e )
+ else
{
- scheduleRemove( session );
- session.getManagerFilterChain().exceptionCaught( session, e );
+ try
+ {
+ flush( session );
+ }
+ catch( IOException e )
+ {
+ scheduleRemove( session );
+ session.getManagerFilterChain().exceptionCaught( session, e );
+ }
}
}
}