diff options
| author | Garrett D'Amore <garrett@damore.org> | 2020-08-08 18:25:48 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2020-08-08 19:30:17 -0700 |
| commit | 6c5070d9157ab0de667568655f0bbeb60780d701 (patch) | |
| tree | ab1a03e16907c97e6d76f1d95d79aea0f4a875ce /src/platform/posix | |
| parent | ddc0d044dd0fcf4aa1dc333fd5bda0de47850a64 (diff) | |
| download | nng-6c5070d9157ab0de667568655f0bbeb60780d701.tar.gz nng-6c5070d9157ab0de667568655f0bbeb60780d701.tar.bz2 nng-6c5070d9157ab0de667568655f0bbeb60780d701.zip | |
fixes #960 NNG threads inherit application thread name
This also exposes an nng_thread_set_name() function for
applications to use. All NNG thread names start with "nng:".
Note that support is highly dependent on the operating system.
Diffstat (limited to 'src/platform/posix')
| -rw-r--r-- | src/platform/posix/posix_pollq_epoll.c | 1 | ||||
| -rw-r--r-- | src/platform/posix/posix_pollq_kqueue.c | 3 | ||||
| -rw-r--r-- | src/platform/posix/posix_pollq_poll.c | 3 | ||||
| -rw-r--r-- | src/platform/posix/posix_pollq_port.c | 1 | ||||
| -rw-r--r-- | src/platform/posix/posix_resolv_gai.c | 4 | ||||
| -rw-r--r-- | src/platform/posix/posix_thread.c | 27 |
6 files changed, 35 insertions, 4 deletions
diff --git a/src/platform/posix/posix_pollq_epoll.c b/src/platform/posix/posix_pollq_epoll.c index d7a2c70f..bbfa9f6e 100644 --- a/src/platform/posix/posix_pollq_epoll.c +++ b/src/platform/posix/posix_pollq_epoll.c @@ -377,6 +377,7 @@ nni_posix_pollq_create(nni_posix_pollq *pq) nni_mtx_fini(&pq->mtx); return (rv); } + nni_thr_set_name(&pq->thr, "nng:poll:epoll"); nni_thr_run(&pq->thr); return (0); } diff --git a/src/platform/posix/posix_pollq_kqueue.c b/src/platform/posix/posix_pollq_kqueue.c index 7d827d7d..dda81be4 100644 --- a/src/platform/posix/posix_pollq_kqueue.c +++ b/src/platform/posix/posix_pollq_kqueue.c @@ -229,6 +229,8 @@ nni_posix_poll_thr(void *arg) { nni_posix_pollq *pq = arg; + nni_thr_set_name(NULL, "nng:poll:kqueue"); + for (;;) { int n; struct kevent evs[NNI_MAX_KQUEUE_EVENTS]; @@ -335,7 +337,6 @@ nni_posix_pollq_create(nni_posix_pollq *pq) int nni_posix_pollq_sysinit(void) { - return (nni_posix_pollq_create(&nni_posix_global_pollq)); } diff --git a/src/platform/posix/posix_pollq_poll.c b/src/platform/posix/posix_pollq_poll.c index 12c5e541..f6f81703 100644 --- a/src/platform/posix/posix_pollq_poll.c +++ b/src/platform/posix/posix_pollq_poll.c @@ -1,5 +1,5 @@ // -// Copyright 2019 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2020 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 @@ -329,6 +329,7 @@ nni_posix_pollq_create(nni_posix_pollq *pq) nni_plat_pipe_close(pq->wakewfd, pq->wakerfd); return (rv); } + nni_thr_set_name(&pq->thr, "nng:poll:poll"); nni_mtx_init(&pq->mtx); nni_thr_run(&pq->thr); return (0); diff --git a/src/platform/posix/posix_pollq_port.c b/src/platform/posix/posix_pollq_port.c index bf628e47..7ce96f68 100644 --- a/src/platform/posix/posix_pollq_port.c +++ b/src/platform/posix/posix_pollq_port.c @@ -228,6 +228,7 @@ nni_posix_pollq_create(nni_posix_pollq *pq) nni_posix_pollq_destroy(pq); return (rv); } + nni_thr_set_name(&pq->thr, "nng:poll:port"); nni_thr_run(&pq->thr); return (0); diff --git a/src/platform/posix/posix_resolv_gai.c b/src/platform/posix/posix_resolv_gai.c index 88313045..1799935e 100644 --- a/src/platform/posix/posix_resolv_gai.c +++ b/src/platform/posix/posix_resolv_gai.c @@ -318,7 +318,9 @@ resolv_worker(void *unused) NNI_ARG_UNUSED(unused); - nni_mtx_lock(&resolv_mtx); + nni_thr_set_name(NULL, "nng:resolver"); + + nni_mtx_lock(&resolv_mtx); for (;;) { nni_aio * aio; resolv_item *item; diff --git a/src/platform/posix/posix_thread.c b/src/platform/posix/posix_thread.c index b8fa814e..0178455f 100644 --- a/src/platform/posix/posix_thread.c +++ b/src/platform/posix/posix_thread.c @@ -1,5 +1,5 @@ // -// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2020 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 @@ -254,6 +254,31 @@ nni_plat_thr_is_self(nni_plat_thr *thr) } void +nni_plat_thr_set_name(nni_plat_thr *thr, const char *name) +{ +#if defined(NNG_HAVE_PTHREAD_SET_NAME_NP) + if (thr == NULL) { + pthread_set_name_np(pthread_self(), name); + } else { + pthread_set_name_np(thr->tid, name); + } +#elif defined(NNG_HAVE_PTHREAD_SETNAME_NP) +#if defined(__APPLE__) + // Darwin is weird, it can only set the name of pthread_self. + if ((thr == NULL) || (pthread_self() == thr->tid)) { + pthread_setname_np(name); + } +#else + if (thr == NULL) { + pthread_setname_np(pthread_self(), name); + } else { + pthread_setname_np(thr->tid, name); + } +#endif +#endif +} + +void nni_atfork_child(void) { nni_plat_forked = 1; |
