&handle->sock->iface);
/* We need to initialize SSL now to reference SSL_CTX properly */
- tlssock->tlsstream.ctx = tlslistensock->tlsstream.ctx;
+ isc_tlsctx_attach(tlslistensock->tlsstream.ctx,
+ &tlssock->tlsstream.ctx);
tlssock->tlsstream.tls = isc_tls_create(tlssock->tlsstream.ctx);
if (tlssock->tlsstream.tls == NULL) {
atomic_store(&tlssock->closed, true);
tlssock->read_timeout = atomic_load(&handle->sock->mgr->init);
tlssock->tid = isc_nm_tid();
- tlssock->tlsstream.ctx = tlslistensock->tlsstream.ctx;
-
result = initialize_tls(tlssock, true);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
/* TODO: catch failure code, detach tlssock, and log the error */
tlssock->result = ISC_R_UNSET;
tlssock->accept_cb = accept_cb;
tlssock->accept_cbarg = accept_cbarg;
- tlssock->tlsstream.ctx = sslctx;
+ isc_tlsctx_attach(sslctx, &tlssock->tlsstream.ctx);
tlssock->tlsstream.tls = NULL;
/*
sock->recv_cbarg = NULL;
if (sock->tlsstream.tls != NULL) {
isc_tls_free(&sock->tlsstream.tls);
- sock->tlsstream.ctx = NULL;
+ isc_tlsctx_free(&sock->tlsstream.ctx);
}
if (sock->outer != NULL) {
nsock->connect_cb = cb;
nsock->connect_cbarg = cbarg;
nsock->connect_timeout = timeout;
- nsock->tlsstream.ctx = ctx;
+ isc_tlsctx_attach(ctx, &nsock->tlsstream.ctx);
isc_nm_tcpconnect(mgr, local, peer, tcp_connected, nsock,
nsock->connect_timeout);
REQUIRE(VALID_NMSOCK(sock->tlsstream.tlslistener));
isc__nmsocket_detach(&sock->tlsstream.tlslistener);
} else if (sock->type == isc_nm_tlssocket) {
+ if (sock->tlsstream.ctx != NULL) {
+ isc_tlsctx_free(&sock->tlsstream.ctx);
+ }
if (sock->tlsstream.tls != NULL) {
isc_tls_free(&sock->tlsstream.tls);
/* These are destroyed when we free SSL */
- sock->tlsstream.ctx = NULL;
sock->tlsstream.bio_out = NULL;
sock->tlsstream.bio_in = NULL;
}
+ } else if (sock->type == isc_nm_tlslistener) {
+ if (sock->tlsstream.ctx != NULL) {
+ isc_tlsctx_free(&sock->tlsstream.ctx);
+ }
}
}