code: func (h *wsHub) redoSearch(wq *watchedQuery) {
  	wq.mu.Lock()
  	defer wq.mu.Unlock()
  	wq.dirty = true
  	if wq.refreshing {
  		// Somebody else is already refreshing.
  		// One's enough.
  		return
  	}
  	for wq.dirty {
  		wq.refreshing = true
  		wq.dirty = false
  		wq.mu.Unlock() // release lock while running query; might become dirty meanwhile
  		h.doSearch(wq)
  		wq.mu.Lock() // before checking wq.dirty
  	}
  	wq.refreshing = false
  }
docs: // redoSearch is called (in its own goroutine) when a new schema blob
  // arrives to note that wq might now have new results and we should
  // re-run it.  But because a search can take awhile, don't run more
  // than one refresh at a time.