diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/listener.c | 25 | ||||
| -rw-r--r-- | src/core/sockimpl.h | 2 | ||||
| -rw-r--r-- | src/core/url.c | 14 | ||||
| -rw-r--r-- | src/core/url.h | 1 |
4 files changed, 24 insertions, 18 deletions
diff --git a/src/core/listener.c b/src/core/listener.c index 8fa50a4f..c6c37abe 100644 --- a/src/core/listener.c +++ b/src/core/listener.c @@ -43,7 +43,7 @@ nni_listener_destroy(nni_listener *l) if (l->l_data != NULL) { l->l_ops.l_fini(l->l_data); } - nng_url_free(l->l_url); + nni_url_fini(&l->l_url); NNI_FREE_STRUCT(l); } @@ -203,22 +203,20 @@ nni_listener_create(nni_listener **lp, nni_sock *s, const char *url_str) nni_sp_tran *tran; nni_listener *l; int rv; - nng_url *url; - if ((rv = nng_url_parse(&url, url_str)) != 0) { + if ((l = NNI_ALLOC_STRUCT(l)) == NULL) { + return (NNG_ENOMEM); + } + if ((rv = nni_url_parse_inline(&l->l_url, url_str)) != 0) { + NNI_FREE_STRUCT(l); return (rv); } - if (((tran = nni_sp_tran_find(url)) == NULL) || + if (((tran = nni_sp_tran_find(&l->l_url)) == NULL) || (tran->tran_listener == NULL)) { - nng_url_free(url); + nni_url_fini(&l->l_url); + NNI_FREE_STRUCT(l); return (NNG_ENOTSUP); } - - if ((l = NNI_ALLOC_STRUCT(l)) == NULL) { - nng_url_free(url); - return (NNG_ENOMEM); - } - l->l_url = url; l->l_closed = false; l->l_data = NULL; l->l_ref = 1; @@ -245,7 +243,8 @@ nni_listener_create(nni_listener **lp, nni_sock *s, const char *url_str) listener_stats_init(l); #endif - if ((rv != 0) || ((rv = l->l_ops.l_init(&l->l_data, url, l)) != 0) || + if ((rv != 0) || + ((rv = l->l_ops.l_init(&l->l_data, &l->l_url, l)) != 0) || ((rv = nni_sock_add_listener(s, l)) != 0)) { nni_mtx_lock(&listeners_lk); nni_id_remove(&listeners, l->l_id); @@ -486,7 +485,7 @@ nni_listener_getopt( // override. This allows the URL to be created with wildcards, // that are resolved later. if (strcmp(name, NNG_OPT_URL) == 0) { - return (nni_copyout_str(l->l_url->u_rawurl, val, szp, t)); + return (nni_copyout_str(l->l_url.u_rawurl, val, szp, t)); } return (nni_sock_getopt(l->l_sock, name, val, szp, t)); diff --git a/src/core/sockimpl.h b/src/core/sockimpl.h index deb226e4..8e2abb18 100644 --- a/src/core/sockimpl.h +++ b/src/core/sockimpl.h @@ -63,7 +63,6 @@ struct nni_listener { uint32_t l_id; // endpoint id nni_list_node l_node; // per socket list nni_sock *l_sock; - nng_url *l_url; int l_ref; bool l_closed; // full shutdown nni_atomic_flag l_closing; // close started (shutdown) @@ -72,6 +71,7 @@ struct nni_listener { nni_aio l_acc_aio; nni_aio l_tmo_aio; nni_reap_node l_reap; + nng_url l_url; #ifdef NNG_ENABLE_STATS nni_stat_item st_root; diff --git a/src/core/url.c b/src/core/url.c index af6be581..7af6a822 100644 --- a/src/core/url.c +++ b/src/core/url.c @@ -525,13 +525,19 @@ nng_url_parse(nng_url **urlp, const char *raw) } void +nni_url_fini(nng_url *url) +{ + nni_strfree(url->u_rawurl); + if (url->u_bufsz != 0) { + nni_free(url->u_buffer, url->u_bufsz); + } +} + +void nng_url_free(nng_url *url) { if (url != NULL) { - nni_strfree(url->u_rawurl); - if (url->u_bufsz != 0) { - nni_free(url->u_buffer, url->u_bufsz); - } + nni_url_fini(url); NNI_FREE_STRUCT(url); } } diff --git a/src/core/url.h b/src/core/url.h index c0ca32a0..0f5f33c9 100644 --- a/src/core/url.h +++ b/src/core/url.h @@ -34,5 +34,6 @@ extern int nni_url_asprintf_port(char **, const nng_url *, int); extern size_t nni_url_decode(uint8_t *, const char *, size_t); extern int nni_url_to_address(nng_sockaddr *, const nng_url *); extern int nni_url_parse_inline(nng_url *, const char *); +extern void nni_url_fini(nng_url *); #endif // CORE_URL_H |
