question: public void handleLockedFifoEntriesBeforeXtnEnd ( Context context , XtnEntry xtnEntry , boolean fromRollback ) throws SAException { long fifoXtnNumber = _cacheManager . getFifoXtnNumber ( xtnEntry ) ; ILockObject entryLock = null ; ISAdapterIterator entriesIter = null ; if ( ! xtnEntry . anyFifoEntriesUnderXtn ( ) || fifoXtnNumber == TerminatingFifoXtnsInfo . UNKNOWN_FIFO_XTN ) return ; try { entriesIter = _cacheManager . makeUnderXtnEntriesIter ( context , xtnEntry , SelectType . ALL_FIFO_ENTRIES , true ) ; if ( entriesIter != null ) { while ( true ) { IEntryCacheInfo entryCacheHolder = ( IEntryCacheInfo ) entriesIter . next ( ) ; if ( entryCacheHolder == null ) break ; IEntryHolder entry = _cacheManager . getEntryFromCacheHolder ( entryCacheHolder ) ; if ( entry == null ) break ; _engine . touchLastEntryTimestamp ( ) ; try { entryLock = getEntryLockObject ( entry ) ; synchronized ( entryLock ) { boolean writeLock = false ; if ( entry . getWriteLockOwner ( ) == xtnEntry ) writeLock = true ; if ( ! fromRollback && writeLock && ( ( entry . getWriteLockOperation ( ) == SpaceOperations . TAKE || entry . getWriteLockOperation ( ) == SpaceOperations . TAKE_IE ) ) ) continue ; if ( fromRollback && writeLock && entry . getWriteLockOperation ( ) == SpaceOperations . WRITE ) continue ; boolean entryWritingXtn = writeLock && entry . getWriteLockOperation ( ) == SpaceOperations . WRITE ; _cacheManager . updateFifoXtnInfoForEntry ( entry , fifoXtnNumber , writeLock , entryWritingXtn ) ; } continue ; } finally { if ( entryLock != null ) freeEntryLockObject ( entryLock ) ; entryLock = null ; } } } } finally { if ( entriesIter != null ) entriesIter . close ( ) ; } }
target:  before xtn terminated update the last readLock/Writelock fifo xtn number for this entryin order to have a coherent picture its is called during prepare/commit/rb from the engine main routines before status change