docs: @Override
      synchronized public void sendResponse(ReplyHeader h, Record r, String tag) {
          try {
              ByteArrayOutputStream baos = new ByteArrayOutputStream();
              // Make space for length
              BinaryOutputArchive bos = BinaryOutputArchive.getArchive(baos);
              try {
                  baos.write(fourBytes);
                  bos.writeRecord(h, "header");
                  if (r != null) {
                      bos.writeRecord(r, tag);
                  }
                  baos.close();
              } catch (IOException e) {
                  LOG.error("Error serializing response");
              }
              byte b[] = baos.toByteArray();
              ByteBuffer bb = ByteBuffer.wrap(b);
              bb.putInt(b.length - 4).rewind();
              sendBuffer(bb);
              if (h.getXid() > 0) {
                  synchronized(this){
                      outstandingRequests--;
                  }
                  // check throttling
                  synchronized (this.factory) {
                      if (zk.getInProcess() < factory.outstandingLimit
                              || outstandingRequests < 1) {
                          sk.selector().wakeup();
                          enableRecv();
                      }
                  }
              }
           } catch(Exception e) {
              LOG.warn("Unexpected exception. Destruction averted.", e);
           }
      }