message: Exit HttpOutputStream.close() early if .close() was already called or the operation was aborted.
  This prevents a second "request/response" from being triggered if .close() was already called, or the first "request/response" from being triggered if already aborted.
diff: _buffer: { value: new ByteArrayOutputStream(), writable: false, enumerable: false, configurable: false },
  _response: { value: undefined, writable: true, enumerable: false, configurable: false },
  _abortToken: { value: undefined, writable: true, enumerable: false, configurable: false },
  + _aborted: { value: false, writable: true, enumerable: false, configurable: false },
  _responseQueue: { value: new BlockingQueue(), writable: true, enumerable: false, configurable: false },
  -
  };
  Object.defineProperties(this, props);
  },
  abort: function abort() {
  if (this._abortToken)
  this._abortToken.abort();
  + this._aborted = true;
  },
  /** @inheritDoc */
  close: function close(timeout, callback) {
  var self = this;
  InterruptibleExecutor(callback, function() {
  - if (this._response)
  + // Do nothing if we already got the response, if we
  + // already initiated the request, or if the call was
  + // aborted.
  + if (this._response || this._abortToken || this._aborted)
  return true;
  var data = this._buffer.toByteArray();
  throw this._exception;
  }
  - // this allows the stream to return already-parsed JSON
  + // This allows the stream to return
  + // already-parsed JSON.
  if (result.response.json !== undefined) {
  this._json = result.response.json;
  this.getJSON = function () { return self._json; };
  