aboutsummaryrefslogtreecommitdiff
path: root/src/platform/posix
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2020-08-08 18:25:48 -0700
committerGarrett D'Amore <garrett@damore.org>2020-08-08 19:30:17 -0700
commit6c5070d9157ab0de667568655f0bbeb60780d701 (patch)
treeab1a03e16907c97e6d76f1d95d79aea0f4a875ce /src/platform/posix
parentddc0d044dd0fcf4aa1dc333fd5bda0de47850a64 (diff)
downloadnng-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.c1
-rw-r--r--src/platform/posix/posix_pollq_kqueue.c3
-rw-r--r--src/platform/posix/posix_pollq_poll.c3
-rw-r--r--src/platform/posix/posix_pollq_port.c1
-rw-r--r--src/platform/posix/posix_resolv_gai.c4
-rw-r--r--src/platform/posix/posix_thread.c27
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;