diff options
author | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2018-04-16 15:14:01 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2018-04-16 15:14:03 +0200 |
commit | 8e32440919dbf84c67ea779009ef76b25787d465 (patch) | |
tree | 5a8f4124e25cc82de31b95aae26eb691ea52ab8d | |
parent | f3bbeba99258c9e5e90630451c7005192850d718 (diff) | |
download | gnutls-8e32440919dbf84c67ea779009ef76b25787d465.tar.gz |
handshake: described the epoch reference counting [ci skip]
It is used only in DTLS where multiple handshake states may be
active.
Resolves #421
Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
-rw-r--r-- | lib/buffers.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/buffers.c b/lib/buffers.c index 52729f3723..e845247772 100644 --- a/lib/buffers.c +++ b/lib/buffers.c @@ -802,6 +802,8 @@ ssize_t _gnutls_handshake_io_write_flush(gnutls_session_t session) total += ret; ret = _mbuffer_head_remove_bytes(send_buffer, ret); + /* for each queued message we send, ensure that + * we drop the epoch refcount set in _gnutls_handshake_io_cache_int(). */ if (ret == 1) _gnutls_epoch_refcount_dec(session, epoch); @@ -841,6 +843,8 @@ _gnutls_handshake_io_cache_int(gnutls_session_t session, send_buffer = &session->internals.handshake_send_buffer; + /* ensure that our epoch does not get garbage collected + * before we send all queued messages with it */ bufel->epoch = (uint16_t) _gnutls_epoch_refcount_inc(session, EPOCH_WRITE_CURRENT); |