svn commit: r338405 - in stable/11: include lib/libc/include lib/libthr lib/libthr/thread share/man/man3
Konstantin Belousov
kib at FreeBSD.org
Fri Aug 31 05:21:36 UTC 2018
Author: kib
Date: Fri Aug 31 05:21:33 2018
New Revision: 338405
URL: https://svnweb.freebsd.org/changeset/base/338405
Log:
MFC r337983, r338044:
Add pthread_get_name_np(3).
Modified:
stable/11/include/pthread_np.h
stable/11/lib/libc/include/namespace.h
stable/11/lib/libc/include/un-namespace.h
stable/11/lib/libthr/pthread.map
stable/11/lib/libthr/thread/thr_exit.c
stable/11/lib/libthr/thread/thr_info.c
stable/11/lib/libthr/thread/thr_private.h
stable/11/share/man/man3/Makefile
stable/11/share/man/man3/pthread_set_name_np.3
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/include/pthread_np.h
==============================================================================
--- stable/11/include/pthread_np.h Fri Aug 31 02:22:33 2018 (r338404)
+++ stable/11/include/pthread_np.h Fri Aug 31 05:21:33 2018 (r338405)
@@ -47,6 +47,7 @@ int pthread_attr_setcreatesuspend_np(pthread_attr_t *)
int pthread_attr_get_np(pthread_t, pthread_attr_t *);
int pthread_attr_getaffinity_np(const pthread_attr_t *, size_t, cpuset_t *);
int pthread_attr_setaffinity_np(pthread_attr_t *, size_t, const cpuset_t *);
+void pthread_get_name_np(pthread_t, char *, size_t);
int pthread_getaffinity_np(pthread_t, size_t, cpuset_t *);
int pthread_getthreadid_np(void);
int pthread_main_np(void);
Modified: stable/11/lib/libc/include/namespace.h
==============================================================================
--- stable/11/lib/libc/include/namespace.h Fri Aug 31 02:22:33 2018 (r338404)
+++ stable/11/lib/libc/include/namespace.h Fri Aug 31 05:21:33 2018 (r338405)
@@ -132,6 +132,7 @@
#define pthread_detach _pthread_detach
#define pthread_equal _pthread_equal
#define pthread_exit _pthread_exit
+#define pthread_get_name_np _pthread_get_name_np
#define pthread_getaffinity_np _pthread_getaffinity_np
#define pthread_getconcurrency _pthread_getconcurrency
#define pthread_getcpuclockid _pthread_getcpuclockid
Modified: stable/11/lib/libc/include/un-namespace.h
==============================================================================
--- stable/11/lib/libc/include/un-namespace.h Fri Aug 31 02:22:33 2018 (r338404)
+++ stable/11/lib/libc/include/un-namespace.h Fri Aug 31 05:21:33 2018 (r338405)
@@ -113,6 +113,7 @@
#undef pthread_detach
#undef pthread_equal
#undef pthread_exit
+#undef pthread_get_name_np
#undef pthread_getaffinity_np
#undef pthread_getconcurrency
#undef pthread_getcpuclockid
Modified: stable/11/lib/libthr/pthread.map
==============================================================================
--- stable/11/lib/libthr/pthread.map Fri Aug 31 02:22:33 2018 (r338404)
+++ stable/11/lib/libthr/pthread.map Fri Aug 31 05:21:33 2018 (r338405)
@@ -321,3 +321,7 @@ FBSD_1.4 {
pthread_mutexattr_getrobust;
pthread_mutexattr_setrobust;
};
+
+FBSD_1.5 {
+ pthread_get_name_np;
+};
Modified: stable/11/lib/libthr/thread/thr_exit.c
==============================================================================
--- stable/11/lib/libthr/thread/thr_exit.c Fri Aug 31 02:22:33 2018 (r338404)
+++ stable/11/lib/libthr/thread/thr_exit.c Fri Aug 31 05:21:33 2018 (r338405)
@@ -281,6 +281,9 @@ exit_thread(void)
{
struct pthread *curthread = _get_curthread();
+ free(curthread->name);
+ curthread->name = NULL;
+
/* Check if there is thread specific data: */
if (curthread->specific != NULL) {
/* Run the thread-specific data destructors: */
Modified: stable/11/lib/libthr/thread/thr_info.c
==============================================================================
--- stable/11/lib/libthr/thread/thr_info.c Fri Aug 31 02:22:33 2018 (r338404)
+++ stable/11/lib/libthr/thread/thr_info.c Fri Aug 31 05:21:33 2018 (r338405)
@@ -1,7 +1,11 @@
/*
* Copyright (c) 1995-1998 John Birrell <jb at cimlogic.com.au>
+ * Copyright (c) 2018 The FreeBSD Foundation
* All rights reserved.
*
+ * Portions of this software were developed by Konstantin Belousov
+ * under sponsorship from the FreeBSD Foundation.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -41,27 +45,65 @@ __FBSDID("$FreeBSD$");
__weak_reference(_pthread_set_name_np, pthread_set_name_np);
+static void
+thr_set_name_np(struct pthread *thread, const char *name)
+{
+
+ free(thread->name);
+ thread->name = strdup(name);
+}
+
/* Set the thread name for debug. */
void
_pthread_set_name_np(pthread_t thread, const char *name)
{
- struct pthread *curthread = _get_curthread();
- int ret = 0;
+ struct pthread *curthread;
+ curthread = _get_curthread();
if (curthread == thread) {
- if (thr_set_name(thread->tid, name))
- ret = errno;
+ THR_THREAD_LOCK(curthread, thread);
+ thr_set_name(thread->tid, name);
+ thr_set_name_np(thread, name);
+ THR_THREAD_UNLOCK(curthread, thread);
} else {
- if ((ret=_thr_find_thread(curthread, thread, 0)) == 0) {
+ if (_thr_find_thread(curthread, thread, 0) == 0) {
if (thread->state != PS_DEAD) {
- if (thr_set_name(thread->tid, name))
- ret = errno;
+ thr_set_name(thread->tid, name);
+ thr_set_name_np(thread, name);
}
THR_THREAD_UNLOCK(curthread, thread);
}
}
-#if 0
- /* XXX should return error code. */
- return (ret);
-#endif
+}
+
+static void
+thr_get_name_np(struct pthread *thread, char *buf, size_t len)
+{
+
+ if (thread->name != NULL)
+ strlcpy(buf, thread->name, len);
+ else if (len > 0)
+ buf[0] = '\0';
+}
+
+__weak_reference(_pthread_get_name_np, pthread_get_name_np);
+
+void
+_pthread_get_name_np(pthread_t thread, char *buf, size_t len)
+{
+ struct pthread *curthread;
+
+ curthread = _get_curthread();
+ if (curthread == thread) {
+ THR_THREAD_LOCK(curthread, thread);
+ thr_get_name_np(thread, buf, len);
+ THR_THREAD_UNLOCK(curthread, thread);
+ } else {
+ if (_thr_find_thread(curthread, thread, 0) == 0) {
+ if (thread->state != PS_DEAD)
+ thr_get_name_np(thread, buf, len);
+ THR_THREAD_UNLOCK(curthread, thread);
+ } else if (len > 0)
+ buf[0] = '\0';
+ }
}
Modified: stable/11/lib/libthr/thread/thr_private.h
==============================================================================
--- stable/11/lib/libthr/thread/thr_private.h Fri Aug 31 02:22:33 2018 (r338404)
+++ stable/11/lib/libthr/thread/thr_private.h Fri Aug 31 05:21:33 2018 (r338405)
@@ -570,6 +570,8 @@ struct pthread {
/* Sleep queue */
struct sleepqueue *sleepqueue;
+ /* pthread_set/get_name_np */
+ char *name;
};
#define THR_SHOULD_GC(thrd) \
Modified: stable/11/share/man/man3/Makefile
==============================================================================
--- stable/11/share/man/man3/Makefile Fri Aug 31 02:22:33 2018 (r338404)
+++ stable/11/share/man/man3/Makefile Fri Aug 31 05:21:33 2018 (r338405)
@@ -328,6 +328,7 @@ PTHREAD_MLINKS+=pthread_rwlock_rdlock.3 pthread_rwlock
PTHREAD_MLINKS+=pthread_rwlock_wrlock.3 pthread_rwlock_trywrlock.3
PTHREAD_MLINKS+=pthread_schedparam.3 pthread_getschedparam.3 \
pthread_schedparam.3 pthread_setschedparam.3
+PTHREAD_MLINKS+=pthread_set_name_np.3 pthread_get_name_np.3
PTHREAD_MLINKS+=pthread_spin_init.3 pthread_spin_destroy.3 \
pthread_spin_lock.3 pthread_spin_trylock.3 \
pthread_spin_lock.3 pthread_spin_unlock.3
Modified: stable/11/share/man/man3/pthread_set_name_np.3
==============================================================================
--- stable/11/share/man/man3/pthread_set_name_np.3 Fri Aug 31 02:22:33 2018 (r338404)
+++ stable/11/share/man/man3/pthread_set_name_np.3 Fri Aug 31 05:21:33 2018 (r338405)
@@ -24,17 +24,20 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 2, 2016
+.Dd August 12, 2018
.Dt PTHREAD_SET_NAME_NP 3
.Os
.Sh NAME
+.Nm pthread_get_name_np ,
.Nm pthread_set_name_np
-.Nd set the thread name
+.Nd set and retrieve the thread name
.Sh LIBRARY
.Lb libpthread
.Sh SYNOPSIS
.In pthread_np.h
.Ft void
+.Fn pthread_get_name_np "pthread_t thread" "char *name" "size_t len"
+.Ft void
.Fn pthread_set_name_np "pthread_t thread" "const char *name"
.Sh DESCRIPTION
The
@@ -43,11 +46,32 @@ function applies a copy of the given
.Fa name
to the given
.Fa thread .
+.Pp
+The
+.Fn pthread_get_name_np
+function retrieves the
+.Fa name
+associated with
+.Fa thread .
+If
+.Fn pthread_set_name_np
+was not previously called for
+.Fa thread ,
+the buffer pointed to by
+.Fa name
+will be empty.
.Sh ERRORS
-Because of the debugging nature of this function, all errors that may
+Because of the debugging nature of these functions, all errors that may
appear inside are silently ignored.
.Sh SEE ALSO
.Xr thr_set_name 2
+.Sh STANDARDS
+.Fn pthread_set_name_np
+and
+.Fn pthread_get_name_np
+are non-standard extensions.
.Sh AUTHORS
This manual page was written by
-.An Alexey Zelkin Aq Mt phantom at FreeBSD.org .
+.An Alexey Zelkin Aq Mt phantom at FreeBSD.org
+and
+.An Yuri Pankov Aq Mt yuripv at yuripv.net .
More information about the svn-src-all
mailing list