anchor.diff:  
           let segmentsBeingReplaced = Set.fold (fun acc g -> Map.add g (Map.find g header.segments) acc ) Map.empty oldGuidsAsSet
   
  -        lock critSectionHeader (fun () -> 
  +        let oldSill = lock critSectionHeader (fun () -> 
               let ndxFirstOld = List.findIndex (fun g -> g=List.head lstOld) header.currentState
               let subListOld = List.skip ndxFirstOld header.currentState |> List.take countOld
               // if the next line fails, it probably means that somebody tried to merge a set
  
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 mySegmentsInWaiting = Map.filter (fun g _ -> Set.contains g newGuidsAsSet) segmentsInWaiting
          //printfn "committing: %A" mySegmentsInWaiting
          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
              let oldSill = header.sill
              header <- newHeader
              oldSill
          )
          //printfn "after commit, currentState: %A" header.currentState
          //printfn "after commit, segments: %A" header.segments
  