mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alessandro Romussi (JIRA)" <j...@apache.org>
Subject [jira] [Created] (DIRMINA-846) AprSocketAcceptor doesn't work and throws IOExceptions many times.
Date Thu, 04 Aug 2011 10:47:27 GMT
AprSocketAcceptor doesn't work and throws IOExceptions many times.

                 Key: DIRMINA-846
                 URL: https://issues.apache.org/jira/browse/DIRMINA-846
             Project: MINA
          Issue Type: Bug
          Components: Transport
    Affects Versions: 2.0.4
         Environment: Windows XP, Java 1.6.0_26, tcnative_1.dll 1.1.20
            Reporter: Alessandro Romussi

We use AprSocketAcceptor for a TCP Server instead of NioSocketAcceptor,
a client (NioSocketConnector) connects to the server and send a string, 
the AprIoProcessor continue throwing an excpetion and no string is received by the handler.
No problem with NioSocketAcceptor and same code.
The excpetion is
WARN  - 2011-08-04 12:37:53,835 - [  AprIoProcessor-3][DefaultExceptionMonitor.java:  47]
Unexpected exception.
java.io.IOException: No error (code: 0)
	at org.apache.mina.transport.socket.apr.AprIoProcessor.throwException(AprIoProcessor.java:467)
	at org.apache.mina.transport.socket.apr.AprIoProcessor.select(AprIoProcessor.java:143)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1093)
	at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

We have observed that if we change the method select(long timeout) of org.apache.mina.transport.socket.apr.AprIoProcessor
at lines 177-183 and we use
       if (socket == wakeupSocket) {
                    synchronized (wakeupLock) {
                        Poll.remove(pollset, wakeupSocket);
                        toBeWakenUp = false;
                       wakeupCalled.set(true); // <-- this is the new line

the problem is solved.

The code that create the IoAcceptor is very simple:

PrefixedStringCodecFactory pscf = new PrefixedStringCodecFactory(
		IoAcceptor acceptor = new AprSocketAcceptor();
                acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(pscf));
		acceptor.getFilterChain().addLast("executor", executorFilter);
		acceptor.setDefaultLocalAddress(new InetSocketAddress(port));

This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira


View raw message