]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Got rid of tlsconnect event and corresponding code
authorArtem Boldariev <artem@boldariev.com>
Fri, 23 Apr 2021 14:30:59 +0000 (17:30 +0300)
committerArtem Boldariev <artem@boldariev.com>
Fri, 7 May 2021 12:47:24 +0000 (15:47 +0300)
We do not need it since we decided to not return values from connect
functions.

lib/isc/netmgr/netmgr-int.h
lib/isc/netmgr/netmgr.c
lib/isc/netmgr/tlsstream.c

index 521ed58d54e8ccb1829cd49c0d27b8caf1ee250e..4384932dca2a6d7696bc0535fcae832402ffc16f 100644 (file)
@@ -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);
 
index e8e3ed992a23981cd6d463cb925264191515efd8..0699fe807e1f4726f12b6d48fe490c89ca78b88d 100644 (file)
@@ -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);
 
index f8e0be0d00d97832285cff60a6bac760ad4120ef..3e0cf4012e5fd2c897b697ad9aaac1279c09b4f6 100644 (file)
@@ -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);
 }