xref: /titanic_53/usr/src/man/man3c/pthread_attr_get_np.3c (revision 443294e178902fc07fa476a6139ae8bc89488c92)
1*443294e1SRobert Mustacchi.\"
2*443294e1SRobert Mustacchi.\" This file and its contents are supplied under the terms of the
3*443294e1SRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0.
4*443294e1SRobert Mustacchi.\" You may only use this file in accordance with the terms of version
5*443294e1SRobert Mustacchi.\" 1.0 of the CDDL.
6*443294e1SRobert Mustacchi.\"
7*443294e1SRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this
8*443294e1SRobert Mustacchi.\" source.  A copy of the CDDL is also available via the Internet at
9*443294e1SRobert Mustacchi.\" http://www.illumos.org/license/CDDL.
10*443294e1SRobert Mustacchi.\"
11*443294e1SRobert Mustacchi.\"
12*443294e1SRobert Mustacchi.\" Copyright 2016 Joyent, Inc.
13*443294e1SRobert Mustacchi.\"
14*443294e1SRobert Mustacchi.Dd Feb 07, 2015
15*443294e1SRobert Mustacchi.Dt PTHREAD_ATTR_GET_NP 3C
16*443294e1SRobert Mustacchi.Os
17*443294e1SRobert Mustacchi.Sh NAME
18*443294e1SRobert Mustacchi.Nm pthread_attr_get_np
19*443294e1SRobert Mustacchi.Nd get pthread attributes of a running thread
20*443294e1SRobert Mustacchi.Sh SYNOPSIS
21*443294e1SRobert Mustacchi.In pthread.h
22*443294e1SRobert Mustacchi.Ft int
23*443294e1SRobert Mustacchi.Fo pthread_attr_get_np
24*443294e1SRobert Mustacchi.Fa "pthread_t thread"
25*443294e1SRobert Mustacchi.Fa "pthread_attr_t *attr"
26*443294e1SRobert Mustacchi.Fc
27*443294e1SRobert Mustacchi.Sh DESCRIPTION
28*443294e1SRobert MustacchiThe
29*443294e1SRobert Mustacchi.Fn pthread_attr_get_np
30*443294e1SRobert Mustacchifunction provides a way to get the attributes of the thread
31*443294e1SRobert Mustacchi.Fa thread
32*443294e1SRobert Mustacchiafter it has been created. This function is most commonly used to obtain
33*443294e1SRobert Mustacchithe actual location and size of a thread's stack.
34*443294e1SRobert Mustacchi.Pp
35*443294e1SRobert MustacchiThe attributes pointer,
36*443294e1SRobert Mustacchi.Fa attr ,
37*443294e1SRobert Mustacchiwill be filled in with the current attributes for the thread. The
38*443294e1SRobert Mustacchiattributes should be allocated by a call to
39*443294e1SRobert Mustacchi.Xr pthread_attr_init 3C
40*443294e1SRobert Mustacchiprior to calling the
41*443294e1SRobert Mustacchi.Fn pthrad_attr_get_np
42*443294e1SRobert Mustacchifunction. When
43*443294e1SRobert Mustacchi.Fa attr
44*443294e1SRobert Mustacchiis done being used, it should be destroyed through a call to
45*443294e1SRobert Mustacchi.Xr pthread_attr_destroy 3C .
46*443294e1SRobert Mustacchi.Pp
47*443294e1SRobert MustacchiThe attributes of the thread
48*443294e1SRobert Mustacchi.Fa thread
49*443294e1SRobert Mustacchiwill be the same as those passed in at the time
50*443294e1SRobert Mustacchi.Xr pthread_create 3C
51*443294e1SRobert Mustacchiwas called (or the default set if none were specified), except that the
52*443294e1SRobert Mustacchifollowing values will be updated:
53*443294e1SRobert Mustacchi.Bl -tag -width Sy
54*443294e1SRobert Mustacchi.It Sy Thread Stack Size
55*443294e1SRobert MustacchiIf no explicit stack size was specified, then
56*443294e1SRobert Mustacchi.Fa attr
57*443294e1SRobert Mustacchiwill contain the actual size of the stack.
58*443294e1SRobert Mustacchi.Pp
59*443294e1SRobert MustacchiIf the size of the stack was specified, then it may have been changed to
60*443294e1SRobert Mustacchiensure that the required alignment of the platform is satisfied.
61*443294e1SRobert Mustacchi.It Sy The Stack Address
62*443294e1SRobert MustacchiIf no stack address was specified, then
63*443294e1SRobert Mustacchi.Fa attr
64*443294e1SRobert Mustacchiwill contain the actual address of the stack that the system allocated
65*443294e1SRobert Mustacchifor the thread.
66*443294e1SRobert Mustacchi.It Sy Thread Detach State
67*443294e1SRobert MustacchiThe detach state, whether or not the thread may be joined by a call to
68*443294e1SRobert Mustacchi.Xr pthread_join 3C ,
69*443294e1SRobert Mustacchimay have changed since the process was created due to a call to
70*443294e1SRobert Mustacchi.Xr pthread_detach 3C .
71*443294e1SRobert Mustacchi.Fa attr
72*443294e1SRobert Mustacchiwill reflect the current setting of
73*443294e1SRobert Mustacchi.Fa thread .
74*443294e1SRobert Mustacchi.It Sy Thread Scheduling Parameter
75*443294e1SRobert MustacchiThe scheduling parameter attribute will be updated with the current
76*443294e1SRobert Mustacchischeduling parameter of
77*443294e1SRobert Mustacchi.Fa thread .
78*443294e1SRobert MustacchiThis is the same information as available through
79*443294e1SRobert Mustacchi.Xr pthread_getschedparam 3C
80*443294e1SRobert Mustacchiand it is the preferred interface for obtaining that information.
81*443294e1SRobert Mustacchi.It Sy Thread Scheduling Policy
82*443294e1SRobert MustacchiThe scheduling policy attribute of
83*443294e1SRobert Mustacchi.Fa attr
84*443294e1SRobert Mustacchiwill be updated with the current scheduling policy being applied to the
85*443294e1SRobert Mustacchithread. This may have changed, for example, due to a call to
86*443294e1SRobert Mustacchi.Xr pthread_setschedparam 3C .
87*443294e1SRobert MustacchiAs with the thread's scheduling parameter, the preferred interface for
88*443294e1SRobert Mustacchiobtaining this information is by using
89*443294e1SRobert Mustacchi.Xr pthread_getschedparam 3C .
90*443294e1SRobert Mustacchi.It Sy Thread Guard Size
91*443294e1SRobert MustacchiThe value of the guard size attribute for the thread will be updated to
92*443294e1SRobert Mustacchireflect the actual size of the guard installed for
93*443294e1SRobert Mustacchi.Fa thread .
94*443294e1SRobert MustacchiFor more information on the guard size of a thread and its purpose, see
95*443294e1SRobert Mustacchi.Xr pthread_attr_getguardsize 3C .
96*443294e1SRobert Mustacchi.El
97*443294e1SRobert Mustacchi.Sh RETURN VALUES
98*443294e1SRobert MustacchiUpon successful completion, the
99*443294e1SRobert Mustacchi.Fn pthread_attr_get_np
100*443294e1SRobert Mustacchiand
101*443294e1SRobert Mustacchi.Fn pthread_getattr_np
102*443294e1SRobert Mustacchifunctions return
103*443294e1SRobert Mustacchi.Sy 0 .
104*443294e1SRobert MustacchiOtherwise, an error number is returned to indicate the error.
105*443294e1SRobert Mustacchi.Sh EXAMPLES
106*443294e1SRobert MustacchiThe following program demonstrates how to use these functions to get
107*443294e1SRobert Mustacchithe location and stack size of a newly created thread.
108*443294e1SRobert Mustacchi.Bd -literal
109*443294e1SRobert Mustacchi#include <assert.h>
110*443294e1SRobert Mustacchi#include <errno.h>
111*443294e1SRobert Mustacchi#include <pthread.h>
112*443294e1SRobert Mustacchi#include <stdio.h>
113*443294e1SRobert Mustacchi#include <stdlib.h>
114*443294e1SRobert Mustacchi#include <string.h>
115*443294e1SRobert Mustacchi
116*443294e1SRobert Mustacchistatic pthread_t g_thr;
117*443294e1SRobert Mustacchi
118*443294e1SRobert Mustacchivoid *
119*443294e1SRobert Mustacchiprint_stackinfo(void *arg)
120*443294e1SRobert Mustacchi{
121*443294e1SRobert Mustacchi	int ret;
122*443294e1SRobert Mustacchi	pthread_attr_t attr;
123*443294e1SRobert Mustacchi	pthread_t *thrp = arg;
124*443294e1SRobert Mustacchi	void *stk;
125*443294e1SRobert Mustacchi	size_t stksize;
126*443294e1SRobert Mustacchi
127*443294e1SRobert Mustacchi	if (pthread_attr_init(&attr) != 0) {
128*443294e1SRobert Mustacchi		fprintf(stderr, "failed to init attr: %s\\n",
129*443294e1SRobert Mustacchi		    strerror(errno));
130*443294e1SRobert Mustacchi		exit(1);
131*443294e1SRobert Mustacchi	}
132*443294e1SRobert Mustacchi
133*443294e1SRobert Mustacchi	if (pthread_attr_get_np(*thrp, &attr) != 0) {
134*443294e1SRobert Mustacchi		fprintf(stderr, "failed to get thread attributes: %s\\n",
135*443294e1SRobert Mustacchi		    strerror(errno));
136*443294e1SRobert Mustacchi		exit(1);
137*443294e1SRobert Mustacchi	}
138*443294e1SRobert Mustacchi
139*443294e1SRobert Mustacchi	ret = pthread_attr_getstackaddr(&attr, &stk);
140*443294e1SRobert Mustacchi	assert(ret == 0);
141*443294e1SRobert Mustacchi	ret = pthread_attr_getstacksize(&attr, &stksize);
142*443294e1SRobert Mustacchi	assert(ret == 0);
143*443294e1SRobert Mustacchi	(void) printf("stack base is at %p, it is %d bytes large\\n",
144*443294e1SRobert Mustacchi	    stk, stksize);
145*443294e1SRobert Mustacchi	return (NULL);
146*443294e1SRobert Mustacchi}
147*443294e1SRobert Mustacchi
148*443294e1SRobert Mustacchiint
149*443294e1SRobert Mustacchimain(void)
150*443294e1SRobert Mustacchi{
151*443294e1SRobert Mustacchi	int ret;
152*443294e1SRobert Mustacchi
153*443294e1SRobert Mustacchi	if ((ret = pthread_create(&g_thr, NULL, print_stackinfo,
154*443294e1SRobert Mustacchi	    &g_thr) != 0)) {
155*443294e1SRobert Mustacchi		fprintf(stderr, "failed to create a thread: %s\\n",
156*443294e1SRobert Mustacchi		    strerror(errno));
157*443294e1SRobert Mustacchi		exit(1);
158*443294e1SRobert Mustacchi	}
159*443294e1SRobert Mustacchi
160*443294e1SRobert Mustacchi	pthread_join(g_thr, NULL);
161*443294e1SRobert Mustacchi	return (0);
162*443294e1SRobert Mustacchi}
163*443294e1SRobert Mustacchi.Ed
164*443294e1SRobert Mustacchi.Sh ERRORS
165*443294e1SRobert MustacchiThe
166*443294e1SRobert Mustacchi.Fn pthread_attr_get_np
167*443294e1SRobert Mustacchifunction will fail if:
168*443294e1SRobert Mustacchi.Bl -tag -width Er
169*443294e1SRobert Mustacchi.It Er EINVAL
170*443294e1SRobert MustacchiThe pthread_attr_t object
171*443294e1SRobert Mustacchi.Fa attr
172*443294e1SRobert Mustacchiwas not properly initialized with a call to
173*443294e1SRobert Mustacchi.Xr pthread_attr_init 3C .
174*443294e1SRobert Mustacchi.It Er ESRCH
175*443294e1SRobert MustacchiNo thread could be found corresponding to the specified thread ID,
176*443294e1SRobert Mustacchi.Fa thread .
177*443294e1SRobert Mustacchi.El
178*443294e1SRobert Mustacchi.Sh INTERFACE STABILITY
179*443294e1SRobert Mustacchi.Sy Committed
180*443294e1SRobert Mustacchi.Sh MT-LEVEL
181*443294e1SRobert Mustacchi.Sy MT-Safe
182*443294e1SRobert Mustacchi.Sh SEE ALSO
183*443294e1SRobert Mustacchi.Xr pthread_attr_destroy 3C ,
184*443294e1SRobert Mustacchi.Xr pthread_attr_getdetachstate 3C ,
185*443294e1SRobert Mustacchi.Xr pthread_attr_getguardsize 3C ,
186*443294e1SRobert Mustacchi.Xr pthread_attr_getinheritsched 3C ,
187*443294e1SRobert Mustacchi.Xr pthread_attr_getschedparam 3C ,
188*443294e1SRobert Mustacchi.Xr pthread_attr_getschedpolicy 3C ,
189*443294e1SRobert Mustacchi.Xr pthread_attr_getscope 3C ,
190*443294e1SRobert Mustacchi.Xr pthread_attr_getstackaddr 3C ,
191*443294e1SRobert Mustacchi.Xr pthread_attr_getstacksize 3C ,
192*443294e1SRobert Mustacchi.Xr pthread_attr_init 3C ,
193*443294e1SRobert Mustacchi.Xr pthread_create 3C ,
194*443294e1SRobert Mustacchi.Xr pthread_detach 3C ,
195*443294e1SRobert Mustacchi.Xr pthread_getschedparam 3C ,
196*443294e1SRobert Mustacchi.Xr pthread_setschedparam 3C ,
197*443294e1SRobert Mustacchi.Xr attributes 5 ,
198*443294e1SRobert Mustacchi.Xr threads 5
199