Edit me

PopRequest

/home/pct/go/src/github.com/Baptist-Publication/chorus/vendor/github.com/Baptist-Publication/angine/blockchain/pool.go

// Pop the first block at pool.height
// It must have been validated by 'second'.Commit from PeekTwoBlocks().
func (pool *BlockPool) PopRequest() {
   pool.mtx.Lock()
   defer pool.mtx.Unlock()

   if r := pool.requesters[pool.height]; r != nil {
      /*  The block can disappear at any time, due to removePeer().
      if r := pool.requesters[pool.height]; r == nil || r.block == nil {
         PanicSanity("PopRequest() requires a valid block")
      }
      */
      r.Stop()
      delete(pool.requesters, pool.height)
      pool.height++
   } else {
      PanicSanity(Fmt("Expected requester to pop, got nothing at height %v", pool.height))
   }
}

这里是删除一个成员,那么height应该递减,为什么还自增呢,如果自增,下次再删除时会不会找不到对象? 原因: 这个requesters在另一个线程中创建了299个,height是一个位置指针,表示用到了哪个,自增是可以循环使用299个requesters。

Tags: