Author: trustin
Date: Wed Jul 11 00:44:34 2007
New Revision: 555195
URL: http://svn.apache.org/viewvc?view=rev&rev=555195
Log:
Optimized SocketFilterChain and SocketIoProcessor to call selector.wakeup() as
less as possible
Modified:
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketFilterChain.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
Modified:
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketFilterChain.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketFilterChain.java?view=diff&rev=555195&r1=555194&r2=555195
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketFilterChain.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketFilterChain.java
Wed Jul 11 00:44:34 2007
@@ -49,15 +49,20 @@
// SocketIoProcessor.doFlush() will reset it after write is finished
// because the buffer will be passed with messageSent event.
( ( ByteBuffer ) writeRequest.getMessage() ).mark();
+
+ int writeRequestQueueSize;
synchronized( writeRequestQueue )
{
writeRequestQueue.offer( writeRequest );
- if( writeRequestQueue.size() == 1 &&
session.getTrafficMask().isWritable() )
- {
- // Notify SocketIoProcessor only when writeRequestQueue was
empty.
- s.getIoProcessor().flush( s );
- }
+ writeRequestQueueSize = writeRequestQueue.size();
}
+
+ if( writeRequestQueueSize == 1 &&
session.getTrafficMask().isWritable() )
+ {
+ // Notify SocketIoProcessor only when writeRequestQueue was empty.
+ s.getIoProcessor().flush( s );
+ }
+
}
@Override
Modified:
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=555195&r1=555194&r2=555195
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
Wed Jul 11 00:44:34 2007
@@ -109,10 +109,13 @@
}
void flush(SocketSessionImpl session) {
+ boolean needsWakeup = flushingSessions.isEmpty();
scheduleFlush(session);
- Selector selector = this.selector;
- if (selector != null) {
- selector.wakeup();
+ if (needsWakeup) {
+ Selector selector = this.selector;
+ if (selector != null) {
+ selector.wakeup();
+ }
}
}