* latch, but within the LogManager log() call. It must not cause any
* logging of its own and should not cause I/O.
*/
public void put(LogItem logItem) {
final VLSN vlsn = logItem.getHeader().getVLSN();
final long lsn = logItem.getNewLsn();
final byte entryType = logItem.getHeader().getType();
logItemCache.put(vlsn, logItem);
synchronized (this) {
tracker.track(vlsn, lsn, entryType);
synchronized (mappingSynchronizer) {
/*
* Put() calls may come out of order, so free the wait latch if
* the incoming VLSN >= the waiting VLSN. For example, a feeder
* may be awaiting VLSN 100, but the call to put(101) comes in
* before the call to put(100).
*/
if ((vlsnPutLatch != null) &&
vlsn.compareTo(putWaitVLSN) >= 0) {
vlsnPutLatch.setLogItem(logItem);
vlsnPutLatch.countDown();
vlsnPutLatch = null;
putWaitVLSN = null;
}