diff --git a/src/security/tls_session.cpp b/src/security/tls_session.cpp
index beaad1787d0109c83eb83df454dee8bc5334f4ed..b0693f60718ba564906ccaa4f1788315019fa048 100644
--- a/src/security/tls_session.cpp
+++ b/src/security/tls_session.cpp
@@ -1161,7 +1161,8 @@ TlsSession::TlsSessionImpl::handleStateHandshake(TlsSessionState state)
         JAMI_DBG("[TLS] handshake");
         ret = gnutls_handshake(session_);
     } while ((ret == GNUTLS_E_INTERRUPTED or ret == GNUTLS_E_AGAIN)
-             and ++retry_count < HANDSHAKE_MAX_RETRY);
+             and ++retry_count < HANDSHAKE_MAX_RETRY
+             and state_.load() != TlsSessionState::SHUTDOWN);
 
     // Stop on fatal error
     if (gnutls_error_is_fatal(ret)) {