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