/* Exception reporting policy method.
   * @param e the Throwable to report.
   */
  private void exception(Throwable e) {
    try {
      _persistent = false;
      int error_code = HttpResponse.__500_Internal_Server_Error;

      if (e instanceof HttpException) {
        error_code = ((HttpException) e).getCode();

        if (_request == null) log.warn(e.toString());
        else log.warn(_request.getRequestLine() + " " + e.toString());
        log.debug(LogSupport.EXCEPTION, e);
      } else if (e instanceof EOFException) {
        LogSupport.ignore(log, e);
        return;
      } else {
        _request.setAttribute("javax.servlet.error.exception_type", e.getClass());
        _request.setAttribute("javax.servlet.error.exception", e);

        if (_request == null) log.warn(LogSupport.EXCEPTION, e);
        else log.warn(_request.getRequestLine(), e);
      }

      if (_response != null && !_response.isCommitted()) {
        _response.reset();
        _response.removeField(HttpFields.__TransferEncoding);
        _response.setField(HttpFields.__Connection, HttpFields.__Close);
        _response.sendError(error_code);
      }
    } catch (Exception ex) {
      LogSupport.ignore(log, ex);
    }
  }