code: func (f *DeltaFIFO) Pop() interface{} {
  	f.lock.Lock()
  	defer f.lock.Unlock()
  	for {
  		for len(f.queue) == 0 {
  			f.cond.Wait()
  		}
  		id := f.queue[0]
  		f.queue = f.queue[1:]
  		item, ok := f.items[id]
  		if f.initialPopulationCount > 0 {
  			f.initialPopulationCount--
  		}
  		if !ok {
  			// Item may have been deleted subsequently.
  			continue
  		}
  		delete(f.items, id)
  		// Don't need to copyDeltas here, because we're transferring
  		// ownership to the caller.
  		return item
  	}
  }
docs: // Pop blocks until an item is added to the queue, and then returns it.  If
  // multiple items are ready, they are returned in the order in which they were
  // added/updated. The item is removed from the queue (and the store) before it
  // is returned, so if you don't successfully process it, you need to add it back
  // with AddIfNotPresent().
  //
  // Pop returns a 'Deltas', which has a complete list of all the things
  // that happened to the object (deltas) while it was sitting in the queue.