diff options
author | Todd Short <tshort@akamai.com> | 2017-01-13 11:00:26 -0500 |
---|---|---|
committer | Rich Salz <rsalz@openssl.org> | 2017-07-26 11:42:17 -0400 |
commit | a58eb06d527c86492d4205feeb0e20bf19a1181d (patch) | |
tree | 2a637ed40c13437a2a2b219e667276c8c963f183 /ssl | |
parent | 0a3452520fe4cd6871ae8b7c4199c6d5d4efe912 (diff) |
Add support to free/allocate SSL buffers
OpenSSL already has the feature of SSL_MODE_RELEASE_BUFFERS that can
be set to release the read or write buffers when data has finished
reading or writing. OpenSSL will automatically re-allocate the buffers
as needed. This can be quite aggressive in terms of memory allocation.
This provides a manual mechanism. SSL_free_buffers() will free
the data buffers if there's no pending data. SSL_alloc_buffers()
will realloc them; but this function is not strictly necessary, as it's
still done automatically in the state machine.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2240)
Diffstat (limited to 'ssl')
-rw-r--r-- | ssl/ssl_lib.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index be15daad86..74767f6e15 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -4778,6 +4778,22 @@ int SSL_early_get0_ext(SSL *s, unsigned int type, const unsigned char **out, return 0; } +int SSL_free_buffers(SSL *ssl) +{ + RECORD_LAYER *rl = &ssl->rlayer; + + if (RECORD_LAYER_read_pending(rl) || RECORD_LAYER_write_pending(rl)) + return 0; + + RECORD_LAYER_release(rl); + return 1; +} + +int SSL_alloc_buffers(SSL *ssl) +{ + return ssl3_setup_buffers(ssl); +} + void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb) { ctx->keylog_callback = cb; |