code: func (u *UndeltaStore) Add(obj interface{}) error {
  	if err := u.Store.Add(obj); err != nil {
  		return err
  	}
  	u.PushFunc(u.Store.List())
  	return nil
  }
docs: // Note about thread safety.  The Store implementation (cache.cache) uses a lock for all methods.
  // In the functions below, the lock gets released and reacquired betweend the {Add,Delete,etc}
  // and the List.  So, the following can happen, resulting in two identical calls to PushFunc.
  // time            thread 1                  thread 2
  // 0               UndeltaStore.Add(a)
  // 1                                         UndeltaStore.Add(b)
  // 2               Store.Add(a)
  // 3                                         Store.Add(b)
  // 4               Store.List() -> [a,b]
  // 5                                         Store.List() -> [a,b]