[ 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.