[ http://issues.apache.org/jira/browse/DIRMINA-82?page=all ]
     
Trustin Lee resolved DIRMINA-82:
--------------------------------

    Resolution: Fixed

I checked in the fix in 0.8.0-SNAPSHOT.

> IdleSession reported only once per IO
> -------------------------------------
>
>          Key: DIRMINA-82
>          URL: http://issues.apache.org/jira/browse/DIRMINA-82
>      Project: Directory MINA
>         Type: Bug
>     Versions: 0.7.3
>     Reporter: Ash Hornbeck
>     Assignee: Trustin Lee
>      Fix For: 0.8

>
> IdleSession reported only once per IO 
> For example, if I do something like this
> // session is a ProtocolSession from an IoProtocolConnector
> session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE,30 ); 
> and a connection is idle for 301 seconds (both read and write), I expect 
> roughly 10 IdleStatus.BOTH_IDLE events.  In 0.7.3 it will only be fired once 
> and only once until IO occurs.  It looks like it is due to the way idle 
> sessions are detected in the following:
> SocketIoProcessor.java:
>    private void notifyIdleSession0( SocketSession session, long currentTime,
>                                     long idleTime, IdleStatus status,
>                                     long lastIoTime )
>     {
>         if( idleTime > 0 && !session.isIdle( status ) && lastIoTime != 0
>             && ( currentTime - lastIoTime ) >= idleTime )
>         {
>             session.setIdle( status, true );
>             session.getManagerFilterChain().sessionIdle( session, status );
>         }
>     }
> Please correct me if I am wrong but it looks as though the statement in the 
> if clause, !session.isIdle( status ), is used to detect if the idle event has 
> been fired.  This prevents multiple session idle events from being fired due 
> to selector timeouts in Worker.run().
> The problem is that using this method there is no way to know that the last 
> idle event was fired greater than idle timeout seconds ago and another event 
> needs to be fired.
> My suggestion is to add lastIdleEventForBoth/Read/Write and replace 
> !session.isIdle( status) with (currentTime ? lastIdleEvent) >= idleTime.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to