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();
  }
}

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 ( ) ; } }
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
