public IEnumerable <TransactionToShip> ReadJournalForShippings(long lastTransactionId) { bool locked = false; if (_shippingSemaphore.IsReadLockHeld == false) { if (_shippingSemaphore.TryEnterReadLock(Debugger.IsAttached ? TimeSpan.FromMinutes(30) : TimeSpan.FromSeconds(30)) == false) { throw new TimeoutException("Could not acquire the read lock in 30 seconds"); } locked = true; } try { var logInfo = _waj._headerAccessor.Get(ptr => ptr->Journal); var transactionsToShip = new List <TransactionToShip>(); for (int journalNumber = 0; journalNumber < logInfo.JournalFilesCount; journalNumber++) { var journalReader = new JournalReader(_waj._env.Options.OpenJournalPager(journalNumber), null, lastTransactionId, null); var journalLogs = journalReader.ReadJournalForShipping(_waj._env.Options).ToList(); if (journalLogs.Count > 0) { transactionsToShip.AddRange(journalLogs); } } return(transactionsToShip); } finally { if (locked) { _shippingSemaphore.ExitReadLock(); } } }