From 7df815a3bc55cec15bdd8e353f99ef461bc0c7c7 Mon Sep 17 00:00:00 2001 From: "William A. Rowe Jr" Date: Fri, 1 Nov 2002 09:29:06 +0000 Subject: [PATCH] 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 --- modules/ssl/ssl_engine_io.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/ssl/ssl_engine_io.c b/modules/ssl/ssl_engine_io.c index 393f54fe6a..3928b892dc 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 */ } } -- 2.50.1