From: William A. Rowe Jr Date: Fri, 1 Nov 2002 09:29:06 +0000 (+0000) Subject: Clean up the read pattern for cases when some data already exists. X-Git-Tag: 2.0.44~175 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a75b148a5fa31385bb84231774b353bdc8c716ae;p=thirdparty%2Fapache%2Fhttpd.git Clean up the read pattern for cases when some data already exists. Also return APR_SUCCESS once we've gathered any decrypted bytes. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@97371 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/ssl/ssl_engine_io.c b/modules/ssl/ssl_engine_io.c index 393f54fe6a4..3928b892dcd 100644 --- a/modules/ssl/ssl_engine_io.c +++ b/modules/ssl/ssl_engine_io.c @@ -656,9 +656,12 @@ static apr_status_t ssl_io_input_read(bio_filter_in_ctx_t *inctx, inctx->cbuf.length += bytes; return APR_SUCCESS; } - if ((*len >= wanted) || inctx->mode == AP_MODE_GETLINE) { + if (*len >= wanted) { return APR_SUCCESS; } + /* Down to a nonblock pattern as we have some data already + */ + inctx->block = APR_NONBLOCK_READ; } while (1) { @@ -683,6 +686,9 @@ static apr_status_t ssl_io_input_read(bio_filter_in_ctx_t *inctx, if (APR_STATUS_IS_EAGAIN(inctx->rc) || APR_STATUS_IS_EINTR(inctx->rc)) { if (inctx->block == APR_NONBLOCK_READ) { + if (*len > 0) { + inctx->rc = APR_SUCCESS; + } break; } } @@ -703,8 +709,12 @@ static apr_status_t ssl_io_input_read(bio_filter_in_ctx_t *inctx, * (This is usually the case when the client forces an SSL * renegotation which is handled implicitly by OpenSSL.) */ + inctx->rc = APR_EAGAIN; + if (inctx->block == APR_NONBLOCK_READ) { - inctx->rc = APR_EAGAIN; + if (*len > 0) { + inctx->rc = APR_SUCCESS; + } break; /* non fatal error */ } }