Fix bug with NewSessionTicket and non-blocking I/O
diff --git a/ChangeLog b/ChangeLog
index f2c42ee..39d0c6b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -36,6 +36,8 @@
* Fixed bug in ssl_cache: when max_entries = 0 and TIMING_C is enabled,
entries would still be created.
* Fixed bug in m_sleep: whould sleep twice too long on most Unix platforms.
+ * Fixed bug with session tickets and non-blocking I/O in the unlikely case
+ send() would return an EAGAIN error when sending the ticket.
= PolarSSL 1.3.4 released on 2014-01-27
Features
diff --git a/library/ssl_srv.c b/library/ssl_srv.c
index 7048f4d..99f7256 100644
--- a/library/ssl_srv.c
+++ b/library/ssl_srv.c
@@ -3003,15 +3003,18 @@
ssl->out_msglen = 10 + tlen;
+ /*
+ * Morally equivalent to updating ssl->state, but NewSessionTicket and
+ * ChangeCipherSpec share the same state.
+ */
+ ssl->handshake->new_session_ticket = 0;
+
if( ( ret = ssl_write_record( ssl ) ) != 0 )
{
SSL_DEBUG_RET( 1, "ssl_write_record", ret );
return( ret );
}
- /* No need to remember writing a NewSessionTicket any more */
- ssl->handshake->new_session_ticket = 0;
-
SSL_DEBUG_MSG( 2, ( "<= write new session ticket" ) );
return( 0 );