code: func (r *translateFileReader) Read(p []byte) (n int, err error) {
  	for {
  		// Obtain notification channel before we check for new data.
  		notify := r.store.WriteNotify()
  
  		// Exit if we can read one or more valid entries or we receive an error.
  		if n, err = r.read(p); n > 0 || err != nil {
  			return n, err
  		}
  
  		// Wait for new data or close.
  		select {
  		case <-r.ctx.Done():
  			return 0, r.ctx.Err()
  		case <-r.closing:
  			return 0, ErrTranslateStoreReaderClosed
  		case <-r.store.Closing():
  			return 0, ErrTranslateStoreClosed
  		case <-notify:
  			continue
  		}
  	}
  }
docs: // Read reads the next section of the available data to p. This should always
  // read from the start of an entry and read n bytes to the end of another entry.