diff options
| author | Garrett D'Amore <garrett@damore.org> | 2022-04-16 14:36:27 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2022-04-16 14:36:27 -0700 |
| commit | 60bf092d3e6e68d0af55c78b679310b1687016e8 (patch) | |
| tree | 9644e6ff61b4f23e4c77b01965fdfb928082b6a2 /src/core/socket.c | |
| parent | ef929a35833fed8eac4aaaf7739d4df1ed72ae00 (diff) | |
| download | nng-60bf092d3e6e68d0af55c78b679310b1687016e8.tar.gz nng-60bf092d3e6e68d0af55c78b679310b1687016e8.tar.bz2 nng-60bf092d3e6e68d0af55c78b679310b1687016e8.zip | |
fixes #1577 nng_stat_find_socket always returns the same stats node
Also this fixes problems with uninitialized socket names, and the
socket name stat not being adjusted correctly when set via API.
Diffstat (limited to 'src/core/socket.c')
| -rw-r--r-- | src/core/socket.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/core/socket.c b/src/core/socket.c index 75c9eedc..7d15f3cb 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -1,5 +1,5 @@ // -// Copyright 2021 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2022 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> // // This software is supplied under the terms of the MIT License, a @@ -237,8 +237,13 @@ sock_get_sockname(void *s, void *buf, size_t *szp, nni_type t) static int sock_set_sockname(void *s, const void *buf, size_t sz, nni_type t) { - return (nni_copyin_str( + int rv; + rv = (nni_copyin_str( SOCK(s)->s_name, buf, sizeof(SOCK(s)->s_name), sz, t)); + if (rv == 0) { + nni_stat_set_string(&SOCK(s)->st_name, SOCK(s)->s_name); + } + return (rv); } static int @@ -646,8 +651,11 @@ nni_sock_open(nni_sock **sockp, const nni_proto *proto) (void) snprintf(s->s_name, sizeof(s->s_name), "%u", s->s_id); #ifdef NNG_ENABLE_STATS - // Set up basic stat values. + // Set up basic stat values. The socket id wasn't + // known at stat creation time, so we set it now. nni_stat_set_id(&s->st_id, (int) s->s_id); + nni_stat_set_id(&s->st_root, (int) s->s_id); + nni_stat_set_string(&s->st_name, s->s_name); // Add our stats chain. nni_stat_register(&s->st_root); @@ -1488,6 +1496,8 @@ nni_dialer_add_pipe(nni_dialer *d, void *tpipe) return; } #ifdef NNG_ENABLE_STATS + nni_stat_set_id(&p->st_root, (int) p->p_id); + nni_stat_set_id(&p->st_id, (int) p->p_id); nni_stat_register(&p->st_root); #endif nni_pipe_run_cb(p, NNG_PIPE_EV_ADD_POST); @@ -1599,6 +1609,8 @@ nni_listener_add_pipe(nni_listener *l, void *tpipe) return; } #ifdef NNG_ENABLE_STATS + nni_stat_set_id(&p->st_root, (int) p->p_id); + nni_stat_set_id(&p->st_id, (int) p->p_id); nni_stat_register(&p->st_root); #endif nni_pipe_run_cb(p, NNG_PIPE_EV_ADD_POST); |
