anchor.diff:                          let blk2 = PageBlock(headBlk.firstPage, headBlk.firstPage+specificSize-1) 
                           let remainder = PageBlock(headBlk.firstPage+specificSize, headBlk.lastPage)
                           freeBlocks <- remainder :: List.tail freeBlocks
  -                        // TODO problem: the list is probably no longer sorted
  +                        // TODO problem: the list is probably no longer sorted.  is this okay?
                           //printfn "reusing blk prune: %A, specificSize:%d, freeBlocks now: %A" headBlk specificSize freeBlocks
                           blk2
                       else
  
positive.code:                     fs.Write(bad,0,pageSize)
                  ) blocks
  
          //stomp() // TODO remove
  
          lock critSectionNextPage (fun () ->
              // all additions to the freeBlocks list should happen here
              // by calling this function.
              
              // TODO policy questions here.  should freeBlocks be sorted?
              // how?  large blocks first, and always take the first one?
  
              // TODO it is important that freeBlocks contains no overlaps.
              // add debug-only checks to verify?
  
  
negative.code: 
  type IPendingSegment = interface end
  
  // PageBlock, struct vs. record
  // struct is a little faster and more compatible with C#
  // record is more F# idiomatic
  type PageBlock = 
  