anchor.diff:  
           let mySegmentsInWaiting = Map.filter (fun g _ -> Set.contains g newGuidsAsSet) segmentsInWaiting
           //printfn "committing: %A" mySegmentsInWaiting
  -        lock critSectionHeader (fun () -> 
  +        let oldSill = 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
  +            let oldSill = header.sill
               header <- newHeader
  +            oldSill
           )
           //printfn "after commit, currentState: %A" header.currentState
           //printfn "after commit, segments: %A" header.segments
  
positive.code:             let remainingSegmentsInWaiting = Map.filter (fun g _ -> Set.contains g newGuidsAsSet |> not) segmentsInWaiting
              segmentsInWaiting <- remainingSegmentsInWaiting
          )
          // 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.
  
negative.code:             let newSill = saveSegmentInfoList newSegments
              let newHeader = {currentState=newState; segments=newSegments; sill = newSill;}
              writeHeader newHeader
              let oldSill = header.sill
              header <- newHeader
              oldSill
          )
          removePendingMerge newGuid
          // the segment we just committed can now be removed from
  