}
isc__nm_readcb(sock, req, result);
if (result == ISC_R_TIMEDOUT &&
- isc__nmsocket_timer_running(sock->outerhandle->sock))
+ (sock->outerhandle == NULL ||
+ isc__nmsocket_timer_running(sock->outerhandle->sock)))
{
destroy = false;
}
/* Decrypt and pass data from network to client */
if (sock->tlsstream.state >= TLS_IO && sock->recv_cb != NULL &&
- !atomic_load(&sock->readpaused))
+ !atomic_load(&sock->readpaused) &&
+ sock->statichandle != NULL)
{
uint8_t recv_buf[TLS_BUF_SIZE];
INSIST(sock->tlsstream.state > TLS_HANDSHAKE);
/* further cleanup performed in isc__nm_tls_cleanup_data() */
atomic_store(&sock->closed, true);
+ atomic_store(&sock->active, false);
sock->tlsstream.state = TLS_CLOSED;
}
if (result != ISC_R_SUCCESS) {
goto error;
}
-
tlssock->peer = isc_nmhandle_peeraddr(handle);
isc_nmhandle_attach(handle, &tlssock->outerhandle);
atomic_store(&tlssock->active, true);