anchor.diff:              let remainingSegmentsInWaiting = Map.filter (fun g _ -> Set.contains g newGuidsAsSet |> not) segmentsInWaiting
               segmentsInWaiting <- remainingSegmentsInWaiting
           )
  +        if oldSill.firstPage > 0 && oldSill.lastPage >= oldSill.firstPage then
  +            addFreeBlocks [ PageBlock(oldSill.firstPage, oldSill.lastPage) ]
           // note that we intentionally do not release the lock here.
           // you can change the segment list more than once while holding
           // the lock.  the lock gets released when you Dispose() it.
  
positive.code: 
          let mySegmentsInWaiting = Map.filter (fun g _ -> Set.contains g newGuidsAsSet) segmentsInWaiting
          //printfn "committing: %A" mySegmentsInWaiting
          lock critSectionHeader (fun () -> 
              let newState = (List.ofSeq newGuids) @ header.currentState
              let newSegments = Map.fold (fun acc g blocks -> Map.add g {age=0;blocks=blocks} acc) header.segments mySegmentsInWaiting
              let newSill = saveSegmentInfoList newSegments
              let newHeader = {currentState=newState; segments=newSegments; sill = newSill;}
              writeHeader newHeader
              // TODO add oldSill to freeBlocks
              header <- newHeader
          )
          //printfn "after commit, currentState: %A" header.currentState
          //printfn "after commit, segments: %A" header.segments
  
negative.code:         let segmentsToBeFreed = Map.filter (fun g _ -> not (Map.containsKey g cursors)) segmentsBeingReplaced
          //printfn "segmentsToBeFreed: %A" segmentsToBeFreed
          let blocksToBeFreed = Seq.fold (fun acc info -> info.blocks @ acc) List.empty (Map.values segmentsToBeFreed)
          if oldSill.firstPage > 0 && oldSill.lastPage >= oldSill.firstPage then
              let blocksToBeFreed' = PageBlock(oldSill.firstPage, oldSill.lastPage) :: blocksToBeFreed
              addFreeBlocks blocksToBeFreed'
          else
              addFreeBlocks blocksToBeFreed
          // note that we intentionally do not release the lock here.
          // you can change the segment list more than once while holding
          // the lock.  the lock gets released when you Dispose() it.
  