code: func newQueue() *queue {
  	lock := new(sync.Mutex)
  	return &queue{
  		headerPendPool:   make(map[string]*fetchRequest),
  		headerContCh:     make(chan bool),
  		blockTaskPool:    make(map[common.Hash]*types.Header),
  		blockTaskQueue:   prque.New(nil),
  		blockPendPool:    make(map[string]*fetchRequest),
  		blockDonePool:    make(map[common.Hash]struct{}),
  		receiptTaskPool:  make(map[common.Hash]*types.Header),
  		receiptTaskQueue: prque.New(nil),
  		receiptPendPool:  make(map[string]*fetchRequest),
  		receiptDonePool:  make(map[common.Hash]struct{}),
  		resultCache:      make([]*fetchResult, blockCacheItems),
  		active:           sync.NewCond(lock),
  		lock:             lock,
  	}
  }
docs: // newQueue creates a new download queue for scheduling block retrieval.