From: Artem Boldariev Date: Fri, 23 Apr 2021 14:30:59 +0000 (+0300) Subject: Got rid of tlsconnect event and corresponding code X-Git-Tag: v9.17.13~9^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=134914233359d62a5bdfefe7996b7f99c1fee622;p=thirdparty%2Fbind9.git Got rid of tlsconnect event and corresponding code We do not need it since we decided to not return values from connect functions. --- diff --git a/lib/isc/netmgr/netmgr-int.h b/lib/isc/netmgr/netmgr-int.h index 521ed58d54e..4384932dca2 100644 --- a/lib/isc/netmgr/netmgr-int.h +++ b/lib/isc/netmgr/netmgr-int.h @@ -1416,9 +1416,6 @@ isc__nm_async_tlsclose(isc__networker_t *worker, isc__netievent_t *ev0); void isc__nm_async_tlssend(isc__networker_t *worker, isc__netievent_t *ev0); -void -isc__nm_async_tlsconnect(isc__networker_t *worker, isc__netievent_t *ev0); - void isc__nm_async_tlsstartread(isc__networker_t *worker, isc__netievent_t *ev0); diff --git a/lib/isc/netmgr/netmgr.c b/lib/isc/netmgr/netmgr.c index e8e3ed992a2..0699fe807e1 100644 --- a/lib/isc/netmgr/netmgr.c +++ b/lib/isc/netmgr/netmgr.c @@ -869,7 +869,6 @@ process_netievent(isc__networker_t *worker, isc__netievent_t *ievent) { NETIEVENT_CASE(tlsstartread); NETIEVENT_CASE(tlssend); NETIEVENT_CASE(tlsclose); - NETIEVENT_CASE(tlsconnect); NETIEVENT_CASE(tlsdobio); NETIEVENT_CASE(tlscancel); diff --git a/lib/isc/netmgr/tlsstream.c b/lib/isc/netmgr/tlsstream.c index f8e0be0d00d..3e0cf4012e5 100644 --- a/lib/isc/netmgr/tlsstream.c +++ b/lib/isc/netmgr/tlsstream.c @@ -86,26 +86,6 @@ inactive(isc_nmsocket_t *sock) { atomic_load(&sock->mgr->closing)); } -static void -update_result(isc_nmsocket_t *sock, const isc_result_t result) { - if (!atomic_load(&sock->tlsstream.result_updated)) { - atomic_store(&sock->tlsstream.result_updated, true); - if (!sock->tlsstream.server) { - LOCK(&sock->lock); - sock->result = result; - SIGNAL(&sock->cond); - while (!atomic_load(&sock->active)) { - WAIT(&sock->scond, &sock->lock); - } - UNLOCK(&sock->lock); - } else { - LOCK(&sock->lock); - sock->result = result; - UNLOCK(&sock->lock); - } - } -} - static void tls_call_connect_cb(isc_nmsocket_t *sock, isc_nmhandle_t *handle, const isc_result_t result) { @@ -562,6 +542,7 @@ initialize_tls(isc_nmsocket_t *sock, bool server) { sock->tlsstream.bio_out); sock->tlsstream.server = server; sock->tlsstream.nsending = 0; + sock->tlsstream.state = TLS_INIT; return (ISC_R_SUCCESS); error: isc_tls_free(&sock->tlsstream.tls); @@ -606,7 +587,6 @@ tlslisten_acceptcb(isc_nmhandle_t *handle, isc_result_t result, void *cbarg) { tlssock->peer = handle->sock->peer; tlssock->read_timeout = atomic_load(&handle->sock->mgr->init); tlssock->tid = isc_nm_tid(); - tlssock->tlsstream.state = TLS_INIT; tlssock->tlsstream.ctx = tlslistensock->tlsstream.ctx; @@ -875,12 +855,14 @@ isc__nm_tls_stoplistening(isc_nmsocket_t *sock) { } } +static void +tcp_connected(isc_nmhandle_t *handle, isc_result_t result, void *cbarg); + void isc_nm_tlsconnect(isc_nm_t *mgr, isc_nmiface_t *local, isc_nmiface_t *peer, isc_nm_cb_t cb, void *cbarg, SSL_CTX *ctx, unsigned int timeout, size_t extrahandlesize) { - isc_nmsocket_t *nsock = NULL, *tsock = NULL; - isc__netievent_tlsconnect_t *ievent = NULL; + isc_nmsocket_t *nsock = NULL; #if defined(NETMGR_TRACE) && defined(NETMGR_TRACE_VERBOSE) fprintf(stderr, "TLS: isc_nm_tlsconnect(): in net thread: %s\n", isc__nm_in_netthread() ? "yes" : "no"); @@ -900,33 +882,10 @@ isc_nm_tlsconnect(isc_nm_t *mgr, isc_nmiface_t *local, isc_nmiface_t *peer, nsock->connect_timeout = timeout; nsock->tlsstream.ctx = ctx; - ievent = isc__nm_get_netievent_tlsconnect(mgr, nsock); - ievent->local = local->addr; - ievent->peer = peer->addr; - ievent->ctx = ctx; - - isc__nmsocket_attach(nsock, &tsock); - if (isc__nm_in_netthread()) { - atomic_store(&nsock->active, true); - nsock->tid = isc_nm_tid(); - isc__nm_async_tlsconnect(&mgr->workers[nsock->tid], - (isc__netievent_t *)ievent); - isc__nm_put_netievent_tlsconnect(mgr, ievent); - } else { - nsock->tid = isc_random_uniform(mgr->nworkers); - isc__nm_enqueue_ievent(&mgr->workers[nsock->tid], - (isc__netievent_t *)ievent); - } - - LOCK(&nsock->lock); - while (nsock->result == ISC_R_DEFAULT) { - WAIT(&nsock->cond, &nsock->lock); - } - atomic_store(&nsock->active, true); - BROADCAST(&nsock->scond); - UNLOCK(&nsock->lock); - INSIST(VALID_NMSOCK(nsock)); - isc__nmsocket_detach(&tsock); + isc_nm_tcpconnect(mgr, + (isc_nmiface_t *)&nsock->tlsstream.local_iface.addr, + (isc_nmiface_t *)&peer->addr, tcp_connected, nsock, + nsock->connect_timeout, 0); } static void @@ -937,38 +896,11 @@ tcp_connected(isc_nmhandle_t *handle, isc_result_t result, void *cbarg) { REQUIRE(VALID_NMSOCK(tlssock)); REQUIRE(VALID_NMHANDLE(handle)); + tlssock->tid = isc_nm_tid(); if (result != ISC_R_SUCCESS) { goto error; } - result = initialize_tls(tlssock, false); - if (result != ISC_R_SUCCESS) { - goto error; - } - - tlssock->peer = isc_nmhandle_peeraddr(handle); - isc_nmhandle_attach(handle, &tlssock->outerhandle); - - tls_do_bio(tlssock, NULL, NULL, false); - return; -error: - tlshandle = isc__nmhandle_get(tlssock, NULL, NULL); - atomic_store(&tlssock->closed, true); - tls_call_connect_cb(tlssock, tlshandle, result); - isc_nmhandle_detach(&tlshandle); - isc__nmsocket_detach(&tlssock); -} - -void -isc__nm_async_tlsconnect(isc__networker_t *worker, isc__netievent_t *ev0) { - isc__netievent_tlsconnect_t *ievent = - (isc__netievent_tlsconnect_t *)ev0; - isc_nmsocket_t *tlssock = ievent->sock; - isc_result_t result; - isc_nmhandle_t *tlshandle = NULL; - - UNUSED(worker); - if (isc__nm_closing(tlssock)) { result = ISC_R_CANCELED; goto error; @@ -983,21 +915,21 @@ isc__nm_async_tlsconnect(isc__networker_t *worker, isc__netievent_t *ev0) { goto error; } - tlssock->tid = isc_nm_tid(); - tlssock->tlsstream.state = TLS_INIT; + result = initialize_tls(tlssock, false); + if (result != ISC_R_SUCCESS) { + goto error; + } - isc_nm_tcpconnect(worker->mgr, (isc_nmiface_t *)&ievent->local, - (isc_nmiface_t *)&ievent->peer, tcp_connected, - tlssock, tlssock->connect_timeout, 0); + tlssock->peer = isc_nmhandle_peeraddr(handle); + isc_nmhandle_attach(handle, &tlssock->outerhandle); + atomic_store(&tlssock->active, true); - update_result(tlssock, ISC_R_SUCCESS); + tls_do_bio(tlssock, NULL, NULL, false); return; - error: tlshandle = isc__nmhandle_get(tlssock, NULL, NULL); atomic_store(&tlssock->closed, true); tls_call_connect_cb(tlssock, tlshandle, result); - update_result(tlssock, result); isc_nmhandle_detach(&tlshandle); isc__nmsocket_detach(&tlssock); }