MFlibc_r: add and document pthread_attr_get_np() function.
This commit is contained in:
parent
7dc9111650
commit
09492be669
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=111846
@ -7,6 +7,7 @@ SRCS+= \
|
||||
thr_aio_suspend.c \
|
||||
thr_attr_destroy.c \
|
||||
thr_attr_init.c \
|
||||
thr_attr_get_np.c \
|
||||
thr_attr_getdetachstate.c \
|
||||
thr_attr_getguardsize.c \
|
||||
thr_attr_getinheritsched.c \
|
||||
|
57
lib/libkse/thread/thr_attr_get_np.c
Normal file
57
lib/libkse/thread/thr_attr_get_np.c
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2002,2003 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
#include <pthread_np.h>
|
||||
#include "pthread_private.h"
|
||||
|
||||
__weak_reference(_pthread_attr_get_np, pthread_attr_get_np);
|
||||
|
||||
int
|
||||
_pthread_attr_get_np(pthread_t pid, pthread_attr_t *dst)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (pid == NULL || dst == NULL || *dst == NULL)
|
||||
return (EINVAL);
|
||||
|
||||
if ((ret = _find_thread(pid)) != 0)
|
||||
return (ret);
|
||||
|
||||
memcpy(*dst, &pid->attr, sizeof(struct pthread_attr));
|
||||
|
||||
/*
|
||||
* Special case, if stack address was not provided by caller
|
||||
* of pthread_create(), then return address allocated internally
|
||||
*/
|
||||
if ((*dst)->stackaddr_attr == NULL)
|
||||
(*dst)->stackaddr_attr = pid->stack;
|
||||
|
||||
return (0);
|
||||
}
|
@ -5,6 +5,7 @@
|
||||
.PATH: ${.CURDIR}/man
|
||||
|
||||
MAN+= pthread_attr.3 \
|
||||
pthread_attr_get_np.3 \
|
||||
pthread_cancel.3 \
|
||||
pthread_cleanup_pop.3 \
|
||||
pthread_cleanup_push.3 \
|
||||
|
115
lib/libpthread/man/pthread_attr_get_np.3
Normal file
115
lib/libpthread/man/pthread_attr_get_np.3
Normal file
@ -0,0 +1,115 @@
|
||||
.\" Copyright (c) 2002,2003 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd January 31, 2003
|
||||
.Dt PTHREAD_ATTR_GET_NP 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm pthread_attr_get_np
|
||||
.Nd get attributes of existent thread
|
||||
.Sh LIBRARY
|
||||
.Lb libc_r
|
||||
.Sh SYNOPSIS
|
||||
.In pthread_np.h
|
||||
.Ft int
|
||||
.Fn pthread_attr_get_np "pthread_t pid" "pthread_attr_t *dst"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn pthread_attr_get_np
|
||||
function is used to get existent thread's attributes.
|
||||
Most fields of
|
||||
.Vt pthread_attr_t
|
||||
structure are exact values of attributes provided at thread creation
|
||||
time (as parameter to
|
||||
.Xr pthread_create 3
|
||||
function), except for the stack address.
|
||||
.Pp
|
||||
Value returned as
|
||||
.Fa dst
|
||||
is supposed to be used in conjunction with
|
||||
.Fn pthread_attr_get*
|
||||
functions to retrieve individual values from
|
||||
.Vt pthread_attr_t
|
||||
structure.
|
||||
Parameter
|
||||
.Fa dst
|
||||
should point to allocated memory area big enough to fit this structure.
|
||||
.Pp
|
||||
It is HIGHLY RECOMMENDED to use
|
||||
.Xr pthread_attr_init 3
|
||||
function to allocate attribute storage.
|
||||
.Sh IMPLEMENTATION NOTES
|
||||
The
|
||||
.Fn pthread_attr_get_np
|
||||
function will always return a pointer to the thread's real stack address,
|
||||
regardless of its value in the original attributes structure.
|
||||
.Sh EXAMPLES
|
||||
.Bd -literal
|
||||
size_t
|
||||
my_thread_stack_size(pthread_t pid)
|
||||
{
|
||||
pthread_attr_t attr;
|
||||
size_t size;
|
||||
|
||||
pthread_attr_init(&attr);
|
||||
pthread_attr_get_np(pid, &attr);
|
||||
pthread_attr_getstacksize(&attr, &size);
|
||||
pthread_attr_destroy(&attr);
|
||||
return(size);
|
||||
}
|
||||
.Ed
|
||||
.Sh RETURN VALUES
|
||||
If successful,
|
||||
.Fn pthread_attr_get_np
|
||||
function returns 0.
|
||||
Otherwise, an error number is returned to indicate the error.
|
||||
.Sh ERRORS
|
||||
.Fn pthread_attr_get_np
|
||||
will fail if:
|
||||
.Bl -tag -width Er
|
||||
.It Bq Er EINVAL
|
||||
Invalid value for one of given parameters.
|
||||
.It Bq Er ESRC
|
||||
No thread could be found corresponding to that specified by the given
|
||||
thread ID.
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr pthread_attr_destroy 3 ,
|
||||
.Xr pthread_attr_getdetachstate 3 ,
|
||||
.Xr pthread_attr_getinheritsched 3 ,
|
||||
.Xr pthread_attr_getschedparam 3 ,
|
||||
.Xr pthread_attr_getschedpolicy 3 ,
|
||||
.Xr pthread_attr_getscope 3 ,
|
||||
.Xr pthread_attr_getstack 3 ,
|
||||
.Xr pthread_attr_getstackaddr 3 ,
|
||||
.Xr pthread_attr_getstacksize 3 ,
|
||||
.Xr pthread_attr_init 3
|
||||
.Sh AUTHORS
|
||||
The
|
||||
.Fn pthread_attr_get_np
|
||||
function and this manual page were written by
|
||||
.An Alexey Zelkin
|
||||
.Aq phantom@FreeBSD.org .
|
@ -7,6 +7,7 @@ SRCS+= \
|
||||
thr_aio_suspend.c \
|
||||
thr_attr_destroy.c \
|
||||
thr_attr_init.c \
|
||||
thr_attr_get_np.c \
|
||||
thr_attr_getdetachstate.c \
|
||||
thr_attr_getguardsize.c \
|
||||
thr_attr_getinheritsched.c \
|
||||
|
57
lib/libpthread/thread/thr_attr_get_np.c
Normal file
57
lib/libpthread/thread/thr_attr_get_np.c
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2002,2003 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
#include <pthread_np.h>
|
||||
#include "pthread_private.h"
|
||||
|
||||
__weak_reference(_pthread_attr_get_np, pthread_attr_get_np);
|
||||
|
||||
int
|
||||
_pthread_attr_get_np(pthread_t pid, pthread_attr_t *dst)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (pid == NULL || dst == NULL || *dst == NULL)
|
||||
return (EINVAL);
|
||||
|
||||
if ((ret = _find_thread(pid)) != 0)
|
||||
return (ret);
|
||||
|
||||
memcpy(*dst, &pid->attr, sizeof(struct pthread_attr));
|
||||
|
||||
/*
|
||||
* Special case, if stack address was not provided by caller
|
||||
* of pthread_create(), then return address allocated internally
|
||||
*/
|
||||
if ((*dst)->stackaddr_attr == NULL)
|
||||
(*dst)->stackaddr_attr = pid->stack;
|
||||
|
||||
return (0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user