You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2009/03/09 17:53:13 UTC
svn commit: r751744 - in /mina/trunk:
core/src/main/java/org/apache/mina/core/polling/
core/src/main/java/org/apache/mina/filter/codec/demux/
core/src/main/java/org/apache/mina/transport/socket/nio/
transport-apr/src/main/java/org/apache/mina/transport...
Author: elecharny
Date: Mon Mar 9 16:53:13 2009
New Revision: 751744
URL: http://svn.apache.org/viewvc?rev=751744&view=rev
Log:
o Added a constant (SELECT_TIMEOU° to replace the magic numbers used in the Processor
o The select(int) is now a select(long), as the Selector.select() method uses a long, not an int.
o Minor refactoring
Modified:
mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java
mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java
Modified: mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java?rev=751744&r1=751743&r2=751744&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java Mon Mar 9 16:53:13 2009
@@ -62,6 +62,9 @@
* It improves memory utilization and write throughput significantly.
*/
private static final int WRITE_SPIN_COUNT = 256;
+
+ /** A timeout used for the select, as we need to get out to deal with idle sessions */
+ private static final long SELECT_TIMEOUT = 1000L;
/** A map containing the last Thread ID for each class */
private static final Map<Class<?>, AtomicInteger> threadIds =
@@ -183,7 +186,7 @@
* @return The number of session ready for read or for write
* @throws Exception if some low level IO error occurs
*/
- protected abstract int select(int timeout) throws Exception;
+ protected abstract int select(long timeout) throws Exception;
/**
* poll those sessions forever
@@ -623,7 +626,7 @@
private void notifyIdleSessions(long currentTime) throws Exception {
// process idle sessions
- if (currentTime - lastIdleCheckTime >= 1000) {
+ if (currentTime - lastIdleCheckTime >= SELECT_TIMEOUT) {
lastIdleCheckTime = currentTime;
AbstractIoSession.notifyIdleness(allSessions(), currentTime);
}
@@ -874,8 +877,11 @@
for (;;) {
try {
- // TODO: Why do we use a timeout here ???
- int selected = select(1000);
+ // This select has a timeout so that we can manage
+ // dile session when we get out of the select every
+ // second. (note : this is a hack to avoid creating
+ // a dedicated thread).
+ int selected = select(SELECT_TIMEOUT);
nSessions += handleNewSessions();
updateTrafficMask();
Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.java?rev=751744&r1=751743&r2=751744&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.java Mon Mar 9 16:53:13 2009
@@ -125,15 +125,18 @@
protected boolean doDecode(IoSession session, IoBuffer in,
ProtocolDecoderOutput out) throws Exception {
State state = getState(session);
+
if (state.currentDecoder == null) {
MessageDecoder[] decoders = state.decoders;
int undecodables = 0;
+
for (int i = decoders.length - 1; i >= 0; i--) {
MessageDecoder decoder = decoders[i];
int limit = in.limit();
int pos = in.position();
MessageDecoderResult result;
+
try {
result = decoder.decodable(session, in);
} finally {
@@ -209,13 +212,16 @@
private State getState(IoSession session) throws Exception {
State state = (State) session.getAttribute(STATE);
+
if (state == null) {
state = new State();
State oldState = (State) session.setAttributeIfAbsent(STATE, state);
+
if (oldState != null) {
state = oldState;
}
}
+
return state;
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java?rev=751744&r1=751743&r2=751744&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java Mon Mar 9 16:53:13 2009
@@ -65,7 +65,7 @@
}
@Override
- protected int select(int timeout) throws Exception {
+ protected int select(long timeout) throws Exception {
return selector.select(timeout);
}
Modified: mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java?rev=751744&r1=751743&r2=751744&view=diff
==============================================================================
--- mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java (original)
+++ mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java Mon Mar 9 16:53:13 2009
@@ -130,7 +130,7 @@
}
@Override
- protected int select(int timeout) throws Exception {
+ protected int select(long timeout) throws Exception {
int rv = Poll.poll(pollset, 1000 * timeout, polledSockets, false);
if (rv <= 0) {
if (rv != -120001) {