mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Carl Wicklow (JIRA)" <j...@apache.org>
Subject [jira] [Created] (DIRMINA-1047) NullPointerException in AbstractIOSession.destroy()
Date Fri, 07 Oct 2016 07:45:20 GMT
Carl Wicklow created DIRMINA-1047:
-------------------------------------

             Summary: NullPointerException in AbstractIOSession.destroy()
                 Key: DIRMINA-1047
                 URL: https://issues.apache.org/jira/browse/DIRMINA-1047
             Project: MINA
          Issue Type: Bug
          Components: Core
    Affects Versions: 2.0.14
         Environment: Any
            Reporter: Carl Wicklow



After upgrading to 2.0.14, we get this NPE ...

{noformat}
java.lang.NullPointerException
	at org.apache.mina.core.session.AbstractIoSession.destroy(AbstractIoSession.java:369)
	at org.apache.mina.core.session.AbstractIoSession.closeNow(AbstractIoSession.java:350)
	at org.apache.mina.core.session.DefaultIoSessionDataStructureFactory$DefaultWriteRequestQueue.poll(DefaultIoSessionDataStructureFactory.java:222)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.flushNow(AbstractPollingIoProcessor.java:827)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.flush(AbstractPollingIoProcessor.java:767)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$700(AbstractPollingIoProcessor.java:68)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1125)
	at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
{noformat}

If I'm reading it right, the destroy also needs to allow that the writeRequest  returned by
the poll() of the WriteRequestQueue may return null if the queue is empty.

In our case the destroy was invoked after polling a CLOSE_REQUEST caused by an earlier closeOnFlush(),
and the write request queue was empty.

{code:title=AbstractIoSession.java|borderStyle=solid}
    protected void destroy() {
        if (writeRequestQueue != null) {
            while (!writeRequestQueue.isEmpty(this)) {
                WriteRequest writeRequest = writeRequestQueue.poll(this);
                WriteFuture writeFuture = writeRequest.getFuture();
                
                // The WriteRequest may not always have a future : The CLOSE_REQUEST
                // and MESSAGE_SENT_REQUEST don't.
                if (writeFuture != null) {
                    writeFuture.setWritten();
                }
            }
        }
    }
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message