code: func msgProcessingTask(c *asyncConnHdl, ctl workerCtl) (sig *interrupt_code, te *taskStatus) {
  
  	// REVU - this should just be an if check with a sig, ok := chan reciever call
  	// TODO
  	timer := time.NewTimer(1 * time.Nanosecond)
  	select {
  	case sig := <-ctl:
  		// interrupted
  		return &sig, &ok_status
  	case <-timer.C:
  		// continue
  	}
  
  	// this deadline affects responsiveness to connection control
  	// signals, and not net io.
  	deadline := time.Now().Add(1 * time.Second) // REVU - TODO
  	c.super.conn.SetReadDeadline(deadline)
  	message, e := GetPubSubResponse(c.super.reader)
  	if e != nil {
  		// check if error is net.Error timeout
  		if isSystemError(e) {
  			syserr := e.(SystemError).Cause()
  			if isNetError(syserr) && syserr.(net.Error).Timeout() {
  				return nil, &ok_status
  			}
  		}
  		// treat anything else as a recieve error
  		return nil, &taskStatus{rcverr, e}
  	}
  	if message == nil {
  		panic(newSystemError("BUG - msgProcessingTask - message is nil on nil error"))
  	}
  	s := c.subscriptions[message.Topic]
  	switch message.Type {
  	case SUBSCRIBE_ACK:
  		s.activated.set(true)
  		s.IsActive = true
  	case UNSUBSCRIBE_ACK:
  		s.IsActive = false
  		close(s.Channel)
  	case MESSAGE:
  		s.Channel <- message.Body
  	default:
  		e := newSystemErrorf("BUG - TODO - unhandled message type - %s", message.Type)
  		return nil, &taskStatus{rcverr, e}
  	}
  	return nil, &ok_status
  }
docs: // Task:
  // process one incoming Redis PubSub message at a time
  // - can be interrupted while waiting on the net read