public final void available ( AbstractItemLink link ) throws SevereMessageStoreException { if ( _jumpbackEnabled ) { final long newPos = link . getPosition ( ) ; // we need to synchronize the read of the position // or we can miss out items when reading an empty queue fast. // More importantly, the removal of the next from the cursor cannot // happen while we are adding the available synchronized ( this ) { if ( newPos <= _highestPosition ) { // Only store matching links, 'coz its quicker if ( null != link . matches ( _filter ) ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( this , tc , "availableLink adding: " + link ) ; _behindList . insert ( link ) ; } else { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( this , tc , "availableLink does not match: " + link ) ; } } else { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( this , tc , "availableLink seq(" + newPos + ") too large (" + _highestPosition + ")" ) ; } } } else { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( this , tc , "available link - jumpbackDisabled: " + link ) ; } }
The cursor is being told that a link has become available . Add it to the list to revisit but only if it is older than the current cursor position .