code: func dbRspProcessingTask(c *asyncConnHdl, ctl workerCtl) (sig *interrupt_code, te *taskStatus) {
  
  	var req asyncReqPtr
  	select {
  	case sig := <-ctl:
  		// interrupted
  		return &sig, &ok_status
  	case req = <-c.pendingResps:
  		// continue to process
  	}
  
  	// process response to asyncRequest
  	reader := c.super.reader
  	cmd := req.cmd
  
  	resp, e3 := GetResponse(reader, cmd) // REVU - protocol modified to handle VIRTUALS
  	if e3 != nil {
  		// system error
  		log.Println("<TEMP DEBUG> Request sent to faults chan on error in GetResponse: ", e3)
  		req.stat = rcverr
  		req.error = newSystemErrorWithCause("GetResponse os.Error", e3)
  		c.faults <- req
  		return nil, &taskStatus{rcverr, e3}
  	}
  
  	// if responsed processed was for cmd QUIT then signal the rest of the crew
  	// REVU - ok, a bit hacky but it works.
  	if cmd == &QUIT {
  		c.feedback <- workerStatus{0, quit_processed, nil, nil}
  		fakesig := pause
  		c.isShutdown = true
  		SetFutureResult(req.future, cmd, resp)
  		return &fakesig, &ok_status
  	}
  
  	SetFutureResult(req.future, cmd, resp)
  	return nil, &ok_status
  }
docs: // Task:
  // process one pending response at a time
  // - can be interrupted while waiting on the pending responses queue
  // - buffered reader takes care of minimizing network io
  //
  // TODO - add timeout handling