thr_set_name(): silently truncate the given name as needed
Instead of failing with ENAMETOOLONG, which is swallowed by pthread_set_name_np() anyway, truncate the given name to MAXCOMLEN+1 bytes. This is more likely what the user wants, and saves the caller from truncating it before the call (which was the only recourse). Polish pthread_set_name_np(3) and add a .Xr to thr_set_name(2) so the user might find the documentation for this behavior. Reviewed by: jilles MFC after: 3 days Sponsored by: Dell EMC
This commit is contained in:
parent
86bd08e9ee
commit
ff07dd913e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=309460
@ -28,7 +28,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd June 1, 2016
|
||||
.Dd December 2, 2016
|
||||
.Dt THR_SET_NAME 2
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -43,37 +43,34 @@
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn thr_set_name
|
||||
sets the user-visible name for the kernel thread with the identifier
|
||||
system call sets the user-visible name for the thread with the identifier
|
||||
.Va id
|
||||
in the current process, to the NUL-terminated string
|
||||
in the current process to the NUL-terminated string
|
||||
.Va name .
|
||||
The name will be silently truncated to fit into a buffer of
|
||||
.Dv MAXCOMLEN + 1
|
||||
bytes.
|
||||
The thread name can be seen in the output of the
|
||||
.Xr ps 1
|
||||
and
|
||||
.Xr top 1
|
||||
commands, in the kernel debuggers and kernel tracing facility outputs,
|
||||
also in userland debuggers and program core files, as notes.
|
||||
and in userland debuggers and program core files, as notes.
|
||||
.Sh RETURN VALUES
|
||||
If successful,
|
||||
.Fn thr_set_name
|
||||
will return zero, otherwise \-1 is returned, and
|
||||
returns zero; otherwise, \-1 is returned, and
|
||||
.Va errno
|
||||
is set to indicate the error.
|
||||
.Sh ERRORS
|
||||
The
|
||||
.Fn thr_set_name
|
||||
operation may return the following errors:
|
||||
system call may return the following errors:
|
||||
.Bl -tag -width Er
|
||||
.It Bq Er EFAULT
|
||||
The memory pointed to by the
|
||||
.Fa name
|
||||
argument is not valid.
|
||||
.It Bq Er ENAMETOOLONG
|
||||
The string pointed to by the
|
||||
.Fa name
|
||||
argument exceeds
|
||||
.Dv MAXCOMLEN + 1
|
||||
bytes in length.
|
||||
.It Bq Er ESRCH
|
||||
The thread with the identifier
|
||||
.Fa id
|
||||
@ -92,6 +89,6 @@ does not exist in the current process.
|
||||
.Xr ktr 9
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn thr_new
|
||||
system call is non-standard and is used by
|
||||
.Fn thr_set_name
|
||||
system call is non-standard and is used by the
|
||||
.Lb libthr .
|
||||
|
@ -24,7 +24,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd February 13, 2003
|
||||
.Dd December 2, 2016
|
||||
.Dt PTHREAD_SET_NAME_NP 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -35,18 +35,19 @@
|
||||
.Sh SYNOPSIS
|
||||
.In pthread_np.h
|
||||
.Ft void
|
||||
.Fn pthread_set_name_np "pthread_t tid" "const char *name"
|
||||
.Fn pthread_set_name_np "pthread_t thread" "const char *name"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn pthread_set_name_np
|
||||
function sets internal name for thread specified by
|
||||
.Fa tid
|
||||
argument to string value specified by
|
||||
function applies a copy of the given
|
||||
.Fa name
|
||||
argument.
|
||||
to the given
|
||||
.Fa thread .
|
||||
.Sh ERRORS
|
||||
Because of the debugging nature of this function, all errors that may
|
||||
appear inside are silently ignored.
|
||||
.Sh SEE ALSO
|
||||
.Xr thr_set_name 2
|
||||
.Sh AUTHORS
|
||||
This manual page was written by
|
||||
.An Alexey Zelkin Aq Mt phantom@FreeBSD.org .
|
||||
|
@ -578,8 +578,11 @@ sys_thr_set_name(struct thread *td, struct thr_set_name_args *uap)
|
||||
error = 0;
|
||||
name[0] = '\0';
|
||||
if (uap->name != NULL) {
|
||||
error = copyinstr(uap->name, name, sizeof(name),
|
||||
NULL);
|
||||
error = copyinstr(uap->name, name, sizeof(name), NULL);
|
||||
if (error == ENAMETOOLONG) {
|
||||
error = copyin(uap->name, name, sizeof(name) - 1);
|
||||
name[sizeof(name) - 1] = '\0';
|
||||
}
|
||||
if (error)
|
||||
return (error);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user