public synchronized void close(boolean waitToWrite) {
    if (waitToWrite) {
      done();
    }

    if (waitToWrite && waitingToWrite) {
      closeAfterWrite = true;
    } else {
      worker.close(this);
    }
  }
 public synchronized boolean onSameThread() {
   return worker.onSameThread();
 }
 private void askToSend() {
   if (!waitingToWrite && output.size() > 0) {
     waitingToWrite = true;
     worker.wantToWrite(this);
   }
 }