Commit f0f9f6f2 authored by William A. Rowe Jr's avatar William A. Rowe Jr
Browse files

  With a last little bit of help from Justin, this should cause the
  appropriate amount of tumolt and turmoil if our client has 'gone away'
  on us, sparing us of further processing (and potential 'renegotiations'
  with a non-existant client.)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk/modules/ssl@97400 13f79535-47bb-0310-9956-ffa450edef68
parent 36a100f3
Loading
Loading
Loading
Loading
+16 −0
Changes for ssl_engine_io.c: 16 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -643,6 +643,12 @@ static apr_status_t ssl_io_filter_Output(ap_filter_t *f,
    apr_status_t status = APR_SUCCESS;
    SSLFilterRec *filter_ctx = f->ctx;

    if (f->c->aborted) {
        /* XXX: This works in 2.0.43, but this will change soon */
        apr_brigade_cleanup(bb);
        return APR_ECONNABORTED;
    }

    if (!filter_ctx->pssl) {
        /* ssl_abort() has been called */
        return ap_pass_brigade(f->next, bb);
@@ -950,6 +956,16 @@ static apr_status_t ssl_io_filter_Input(ap_filter_t *f,
    apr_size_t len = sizeof(inctx->buffer);
    int is_init = (mode == AP_MODE_INIT);

    if (f->c->aborted) {
        /* XXX: Ok, if we aborted, we ARE at the EOS.  We also have
         * aborted.  This 'double protection' is probably redundant,
         * but also effective against just about anything.
         */
        apr_bucket *bucket = apr_bucket_eos_create(f->c->bucket_alloc);
        APR_BRIGADE_INSERT_TAIL(bb, bucket);
        return APR_ECONNABORTED;
    }

    if (!inctx->ssl) {
        return ap_get_brigade(f->next, bb, mode, block, readbytes);
    }