Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F142527728
D16702.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
7 KB
Referenced Files
None
Subscribers
None
D16702.diff
View Options
Index: head/include/pthread_np.h
===================================================================
--- head/include/pthread_np.h
+++ head/include/pthread_np.h
@@ -49,6 +49,7 @@
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);
Index: head/lib/libc/include/namespace.h
===================================================================
--- head/lib/libc/include/namespace.h
+++ head/lib/libc/include/namespace.h
@@ -134,6 +134,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
Index: head/lib/libc/include/un-namespace.h
===================================================================
--- head/lib/libc/include/un-namespace.h
+++ head/lib/libc/include/un-namespace.h
@@ -115,6 +115,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
Index: head/lib/libthr/pthread.map
===================================================================
--- head/lib/libthr/pthread.map
+++ head/lib/libthr/pthread.map
@@ -321,3 +321,7 @@
pthread_mutexattr_getrobust;
pthread_mutexattr_setrobust;
};
+
+FBSD_1.5 {
+ pthread_get_name_np;
+};
Index: head/lib/libthr/thread/thr_exit.c
===================================================================
--- head/lib/libthr/thread/thr_exit.c
+++ head/lib/libthr/thread/thr_exit.c
@@ -280,6 +280,9 @@
{
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: */
Index: head/lib/libthr/thread/thr_info.c
===================================================================
--- head/lib/libthr/thread/thr_info.c
+++ head/lib/libthr/thread/thr_info.c
@@ -2,8 +2,12 @@
* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 1995-1998 John Birrell <jb@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:
@@ -43,27 +47,65 @@
__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';
+ }
}
Index: head/lib/libthr/thread/thr_private.h
===================================================================
--- head/lib/libthr/thread/thr_private.h
+++ head/lib/libthr/thread/thr_private.h
@@ -572,6 +572,8 @@
/* Sleep queue */
struct sleepqueue *sleepqueue;
+ /* pthread_set/get_name_np */
+ char *name;
};
#define THR_SHOULD_GC(thrd) \
Index: head/share/man/man3/Makefile
===================================================================
--- head/share/man/man3/Makefile
+++ head/share/man/man3/Makefile
@@ -334,6 +334,7 @@
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
Index: head/share/man/man3/pthread_set_name_np.3
===================================================================
--- head/share/man/man3/pthread_set_name_np.3
+++ head/share/man/man3/pthread_set_name_np.3
@@ -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 @@
.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@FreeBSD.org .
+.An Alexey Zelkin Aq Mt phantom@FreeBSD.org
+and
+An Yuri Pankov Aq Mt yuripv@yuripv.net .
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Jan 21, 3:57 PM (17 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27812515
Default Alt Text
D16702.diff (7 KB)
Attached To
Mode
D16702: Add pthread_get_name_np(3).
Attached
Detach File
Event Timeline
Log In to Comment