When TLS connection (TLSstream) connection was accepted, the children
listening socket was not attached to sock->server and thus it could have
been freed before all the accepted connections were actually closed.
In turn, this would cause us to call isc_tls_free() too soon - causing
cascade errors in pending SSL_read_ex() in the accepted connections.
Properly attach and detach the children listening socket when accepting
and closing the server connections.
(cherry picked from commit
684f3eb8e62fb2dd2e6adf3272e87b1fd4b08579)
tlssock = isc_mem_get(handle->sock->mgr->mctx, sizeof(*tlssock));
isc__nmsocket_init(tlssock, handle->sock->mgr, isc_nm_tlssocket,
&handle->sock->iface);
+ isc__nmsocket_attach(tlslistensock, &tlssock->server);
tid = isc_nm_tid();
/* We need to initialize SSL now to reference SSL_CTX properly */
isc__nmsocket_detach(&sock->listener);
}
+ if (sock->server != NULL) {
+ isc__nmsocket_detach(&sock->server);
+ }
+
/* Further cleanup performed in isc__nm_tls_cleanup_data() */
atomic_store(&sock->closed, true);
atomic_store(&sock->active, false);