docs: private void mergeFreeEntries(List<FileEntry> entries) {
        long startTime = 0;
        if (trace) startTime = timeService.wallClockTime();
        FileEntry lastEntry = null;
        FileEntry newEntry = null;
        int mergeCounter = 0;
        for (FileEntry fe : entries) {
           if (fe.isLocked())
              continue;
  
           // Merge any holes created (consecutive free entries) in the file
           if ((lastEntry != null) && (lastEntry.offset == (fe.offset + fe.size))) {
              if (newEntry == null) {
                 newEntry = new FileEntry(fe.offset, fe.size + lastEntry.size);
                 freeList.remove(lastEntry);
                 mergeCounter++;
              } else {
                 newEntry = new FileEntry(fe.offset, fe.size + newEntry.size);
              }
              freeList.remove(fe);
              mergeCounter++;
           } else {
              if (newEntry != null) {
                 mergeAndLogEntry(newEntry, mergeCounter);
                 newEntry = null;
                 mergeCounter = 0;
              }
           }
           lastEntry = fe;
        }
  
        if (newEntry != null)
           mergeAndLogEntry(newEntry, mergeCounter);
  
        if (trace) log.tracef("Total time taken for mergeFreeEntries: " + (timeService.wallClockTime() - startTime) + " (ms)");
     }