[ 
https://issues.apache.org/jira/browse/DIRMINA-82?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Emmanuel Lecharny closed DIRMINA-82.
------------------------------------


> IdleSession reported only once per IO
> -------------------------------------
>
>                 Key: DIRMINA-82
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-82
>             Project: MINA
>          Issue Type: Bug
>    Affects Versions: 0.7.3
>            Reporter: Ash Hornbeck
>            Assignee: Trustin Lee
>             Fix For: 0.8.0
>
>
> 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.
-
You can reply to this email to add a comment to the issue online.

Reply via email to