mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dominique Prunier (JIRA)" <j...@apache.org>
Subject [jira] Created: (DIRMINA-212) Possible connection leak in SocketConnector ?
Date Fri, 05 May 2006 22:07:29 GMT
Possible connection leak in SocketConnector ?

         Key: DIRMINA-212
         URL: http://issues.apache.org/jira/browse/DIRMINA-212
     Project: Directory MINA
        Type: Bug

    Versions: 0.9.4    
 Environment: Observed on Solaris 9
Java HotSpot Server VM 1.4.2_11
    Reporter: Dominique Prunier

In SocketConnector class, it seems that there may be a race condition where mina lose reference
on a channel that has not been closed. Since Sun removed any finalize methods in channels,
it will remains connected forever.
This has been observed with server which doens't accept more than one connection. First connection
timesout according to mina but channel is not closed in processTimedOutSessions method. Key
is removed from selector thus it is not notified (then handlers never see the sessionOpened
event) when connection finally gets up late (observed with tcpdump). The reference on this
connection is lost and socket is never closed (observed with lsof). Then subsequent connection
always fail since we already have a phantom one opened.

    private void processTimedOutSessions( Set keys )
        long currentTime = System.currentTimeMillis();
        Iterator it = keys.iterator();

        while( it.hasNext() )
            SelectionKey key = ( SelectionKey ) it.next();

            if( !key.isValid() )

            ConnectionRequest entry = ( ConnectionRequest ) key.attachment();

            if( currentTime >= entry.deadline )
                entry.setException( new ConnectException() );
                key.cancel(); <-------------- MISSING CLOSE HERE ???

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message