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