summaryrefslogtreecommitdiff
path: root/lib/gnutls_handshake.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2012-02-08 23:44:13 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2012-02-08 23:44:13 +0100
commit8c19b028492148fcd27c2472a56cb46b88e5eea2 (patch)
tree1fc8e9c598710935b97b3dc2ec8d5f90baa3bb47 /lib/gnutls_handshake.c
parentda7ed7be8266fe7c478533342aea4a9bdb651d5d (diff)
downloadgnutls-8c19b028492148fcd27c2472a56cb46b88e5eea2.tar.gz
gnutls_record_check_pending() accounts data not yet processed.
DTLS layer avoids multiple retransmissions in non-blocking mode.
Diffstat (limited to 'lib/gnutls_handshake.c')
-rw-r--r--lib/gnutls_handshake.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/gnutls_handshake.c b/lib/gnutls_handshake.c
index f362be81e3..60434fa950 100644
--- a/lib/gnutls_handshake.c
+++ b/lib/gnutls_handshake.c
@@ -2680,7 +2680,8 @@ _gnutls_recv_handshake_final (gnutls_session_t session, int init)
/* This is the last flight and peer cannot be sure
* we have received it unless we notify him. So we
* wait for a message and retransmit if needed. */
- if (IS_DTLS(session) && !_dtls_is_async(session))
+ if (IS_DTLS(session) && !_dtls_is_async(session) &&
+ gnutls_record_check_pending (session) == 0)
{
ret = _dtls_wait_and_retransmit(session);
if (ret < 0)
@@ -2716,7 +2717,8 @@ _gnutls_recv_handshake_final (gnutls_session_t session, int init)
case STATE31:
STATE = STATE31;
- if (IS_DTLS(session) && !_dtls_is_async(session))
+ if (IS_DTLS(session) && !_dtls_is_async(session) &&
+ gnutls_record_check_pending( session) == 0)
{
ret = _dtls_wait_and_retransmit(session);
if (ret < 0)