From 1e945e873d3bd791354dec504e42025502c6042f Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Mon, 1 Jan 2018 22:12:07 -0800 Subject: Fix HTTP sconn race, and compile bugs introduced. --- src/nng.h | 2 +- src/supplemental/http/http.c | 7 ++++--- src/supplemental/tls/mbedtls/tls.c | 2 +- src/transport/tls/tls.c | 6 +++--- src/transport/ws/websocket.c | 6 +++--- 5 files changed, 12 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/nng.h b/src/nng.h index 31b56729..05e99771 100644 --- a/src/nng.h +++ b/src/nng.h @@ -601,7 +601,7 @@ typedef enum nng_tls_auth_mode { // nng_tls_config_alloc creates a TLS configuration using // reasonable defaults. This configuration can be shared // with multiple pipes or services/servers. -NNG_DECL int nng_tls_config_init(nng_tls_config **, nng_tls_mode); +NNG_DECL int nng_tls_config_alloc(nng_tls_config **, nng_tls_mode); // nng_tls_config_free drops the reference count on the TLS // configuration object, and if zero, deallocates it. diff --git a/src/supplemental/http/http.c b/src/supplemental/http/http.c index df5c7588..723b3e55 100644 --- a/src/supplemental/http/http.c +++ b/src/supplemental/http/http.c @@ -429,11 +429,12 @@ http_wr_cancel(nni_aio *aio, int rv) nni_mtx_lock(&http->mtx); if (nni_aio_list_active(aio)) { - nni_aio_list_remove(aio); if (aio == nni_list_first(&http->wrq)) { - http_close(http); + nni_aio_cancel(http->wr_aio, NNG_ECANCELED); + } else { + nni_aio_list_remove(aio); + nni_aio_finish_error(aio, rv); } - nni_aio_finish_error(aio, rv); } nni_mtx_unlock(&http->mtx); } diff --git a/src/supplemental/tls/mbedtls/tls.c b/src/supplemental/tls/mbedtls/tls.c index 5c92d7d9..742265f1 100644 --- a/src/supplemental/tls/mbedtls/tls.c +++ b/src/supplemental/tls/mbedtls/tls.c @@ -1072,7 +1072,7 @@ nng_tls_config_alloc(nng_tls_config **cfgp, nng_tls_mode mode) return (nni_tls_config_init(cfgp, mode)); } -int +void nng_tls_config_free(nng_tls_config *cfg) { nni_tls_config_fini(cfg); diff --git a/src/transport/tls/tls.c b/src/transport/tls/tls.c index f2ca6d35..1104d4b2 100644 --- a/src/transport/tls/tls.c +++ b/src/transport/tls/tls.c @@ -589,7 +589,7 @@ nni_tls_ep_fini(void *arg) nni_plat_tcp_ep_fini(ep->tep); } if (ep->cfg) { - nng_tls_config_fini(ep->cfg); + nni_tls_config_fini(ep->cfg); } nni_aio_fini(ep->aio); nni_mtx_fini(&ep->mtx); @@ -684,7 +684,7 @@ nni_tls_ep_init(void **epp, const char *url, nni_sock *sock, int mode) } if (((rv = nni_plat_tcp_ep_init(&ep->tep, &lsa, &rsa, mode)) != 0) || - ((rv = nng_tls_config_init(&ep->cfg, tlsmode)) != 0) || + ((rv = nni_tls_config_init(&ep->cfg, tlsmode)) != 0) || ((rv = nng_tls_config_auth_mode(ep->cfg, authmode)) != 0) || ((rv = nni_aio_init(&ep->aio, nni_tls_ep_cb, ep)) != 0)) { nni_strfree(rhost); @@ -887,7 +887,7 @@ tls_setopt_config(void *arg, const void *data, size_t sz) nni_tls_config_hold(cfg); ep->cfg = cfg; if (old != NULL) { - nng_tls_config_fini(old); + nni_tls_config_fini(old); } return (0); } diff --git a/src/transport/ws/websocket.c b/src/transport/ws/websocket.c index 1162338e..5a5a4b00 100644 --- a/src/transport/ws/websocket.c +++ b/src/transport/ws/websocket.c @@ -603,7 +603,7 @@ ws_ep_fini(void *arg) nni_mtx_fini(&ep->mtx); #ifdef NNG_TRANSPORT_WSS if (ep->tls) { - nng_tls_config_fini(ep->tls); + nni_tls_config_fini(ep->tls); } #endif NNI_FREE_STRUCT(ep); @@ -706,7 +706,7 @@ ws_ep_init(void **epp, const char *url, nni_sock *sock, int mode) #ifdef NNG_TRANSPORT_WSS if (strncmp(url, "wss://", 4) == 0) { - rv = nng_tls_config_init(&ep->tls, + rv = nni_tls_config_init(&ep->tls, mode == NNI_EP_MODE_DIAL ? NNG_TLS_MODE_CLIENT : NNG_TLS_MODE_SERVER); if (rv != 0) { @@ -817,7 +817,7 @@ wss_ep_setopt_tlsconfig(void *arg, const void *v, size_t sz) } if (rv == 0) { if (ep->tls != NULL) { - nng_tls_config_fini(ep->tls); + nni_tls_config_fini(ep->tls); } nni_tls_config_hold(cfg); ep->tls = cfg; -- cgit v1.2.3-70-g09d2