1dcdfe824SRobert Mustacchi.\" 2dcdfe824SRobert Mustacchi.\" This file and its contents are supplied under the terms of the 3dcdfe824SRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0. 4dcdfe824SRobert Mustacchi.\" You may only use this file in accordance with the terms of version 5dcdfe824SRobert Mustacchi.\" 1.0 of the CDDL. 6dcdfe824SRobert Mustacchi.\" 7dcdfe824SRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this 8dcdfe824SRobert Mustacchi.\" source. A copy of the CDDL is also available via the Internet at 9dcdfe824SRobert Mustacchi.\" http://www.illumos.org/license/CDDL. 10dcdfe824SRobert Mustacchi.\" 11dcdfe824SRobert Mustacchi.\" 12dcdfe824SRobert Mustacchi.\" Copyright 2016 Joyent, Inc. 13dcdfe824SRobert Mustacchi.\" 14dcdfe824SRobert Mustacchi.Dd "Jan 11, 2015" 15dcdfe824SRobert Mustacchi.Dt TSS 3C 16dcdfe824SRobert Mustacchi.Os 17dcdfe824SRobert Mustacchi.Sh NAME 18dcdfe824SRobert Mustacchi.Nm tss , 19dcdfe824SRobert Mustacchi.Nm tss_create , 20dcdfe824SRobert Mustacchi.Nm tss_destroy , 21dcdfe824SRobert Mustacchi.Nm tss_get , 22dcdfe824SRobert Mustacchi.Nm tss_set 23dcdfe824SRobert Mustacchi.Nd thread-specific storage 24dcdfe824SRobert Mustacchi.Sh SYNOPSIS 25dcdfe824SRobert Mustacchi.In threads.h 26dcdfe824SRobert Mustacchi.Vt "typedef void (*tss_dtor_t)(void *);" 27dcdfe824SRobert Mustacchi.Ft int 28dcdfe824SRobert Mustacchi.Fo tss_create 29dcdfe824SRobert Mustacchi.Fa "tss_t *key" 30dcdfe824SRobert Mustacchi.Fa "tss_dtor_t dtor" 31dcdfe824SRobert Mustacchi.Fc 32dcdfe824SRobert Mustacchi.Ft void 33dcdfe824SRobert Mustacchi.Fo tss_delete 34dcdfe824SRobert Mustacchi.Fa "tss_t key" 35dcdfe824SRobert Mustacchi.Fc 36dcdfe824SRobert Mustacchi.Ft void * 37dcdfe824SRobert Mustacchi.Fo tss_get 38dcdfe824SRobert Mustacchi.Fa "tss_t key" 39dcdfe824SRobert Mustacchi.Fc 40dcdfe824SRobert Mustacchi.Ft int 41dcdfe824SRobert Mustacchi.Fo tss_set 42dcdfe824SRobert Mustacchi.Fa "tss_t key" 43dcdfe824SRobert Mustacchi.Fa "void *val" 44dcdfe824SRobert Mustacchi.Fc 45dcdfe824SRobert Mustacchi.Sh DESCRIPTION 46dcdfe824SRobert MustacchiThe 47dcdfe824SRobert Mustacchi.Sy tss 48dcdfe824SRobert Mustacchifamily of functions create, get, set, and destroy thread-specific 49dcdfe824SRobert Mustacchistorage. 50dcdfe824SRobert Mustacchi.Ss Creating and Destorying Thread-Specific Storage 51dcdfe824SRobert MustacchiThe 52dcdfe824SRobert Mustacchi.Fn tss_create 53dcdfe824SRobert Mustacchifunction creates a new thread-specific data key. The key space is opaque 54dcdfe824SRobert Mustacchiand global to all threads in the process. Each thread has its own 55dcdfe824SRobert Mustacchivalue-space which can be mainpulated with the 56dcdfe824SRobert Mustacchi.Fn tss_get 57dcdfe824SRobert Mustacchiand 58dcdfe824SRobert Mustacchi.Fn tss_set 59dcdfe824SRobert Mustacchifunctions. A given key persists until 60dcdfe824SRobert Mustacchi.Fn tss_destroy 61dcdfe824SRobert Mustacchiis called. 62dcdfe824SRobert Mustacchi.Pp 63dcdfe824SRobert MustacchiWhen a key is created, the value 64dcdfe824SRobert Mustacchi.Dv NULL 65dcdfe824SRobert Mustacchiis associated with all current threads. When a thread is created, the 66dcdfe824SRobert Mustacchivalue 67dcdfe824SRobert Mustacchi.Dv NULL 68dcdfe824SRobert Mustacchiis assigned as the value for the entire key-space. 69dcdfe824SRobert Mustacchi.Pp 70dcdfe824SRobert MustacchiA key may optionally be created with a destructor function 71dcdfe824SRobert Mustacchi.Fa dtor . 72dcdfe824SRobert MustacchiThe function 73dcdfe824SRobert Mustacchi.Fa dtor 74dcdfe824SRobert Mustacchiwill run when the thread exits (see 75dcdfe824SRobert Mustacchi.Xr thrd_exit 3C ) 76dcdfe824SRobert Mustacchiif the value for the key is not 77dcdfe824SRobert Mustacchi.Dv NULL . 78dcdfe824SRobert MustacchiThe key space's destructors may be run in any order. When the destructor 79dcdfe824SRobert Mustacchiis run due to a thread exiting, all signals will be blocked. 80dcdfe824SRobert Mustacchi.Pp 81dcdfe824SRobert MustacchiThe 82dcdfe824SRobert Mustacchi.Fn tss_delete 83dcdfe824SRobert Mustacchifunction deletes the key identify by 84dcdfe824SRobert Mustacchi.Fa key 85dcdfe824SRobert Mustacchifrom the global name-space. When a key is deleted, no registered 86dcdfe824SRobert Mustacchidestructor is called, it is up to the calling program to free any 87dcdfe824SRobert Mustacchistorage that was associated with 88dcdfe824SRobert Mustacchi.Fa key 89dcdfe824SRobert Mustacchiacross all threads. Because of this propety, it is legal to call 90dcdfe824SRobert Mustacchi.Fn tss_delete 91dcdfe824SRobert Mustacchifrom inside a destructor. Any destructors that had been assocaited with 92dcdfe824SRobert Mustacchi.Fa key 93dcdfe824SRobert Mustacchiwill no longer be called when a thread terminates. 94dcdfe824SRobert Mustacchi.Ss Obtaining Values 95dcdfe824SRobert MustacchiThe 96dcdfe824SRobert Mustacchi.Fn tss_get 97dcdfe824SRobert Mustacchifunction may be used to obtain the value associated with 98dcdfe824SRobert Mustacchi.Fa key 99dcdfe824SRobert Mustacchifor the calling thread. Note that if the calling thread has never set a 100dcdfe824SRobert Mustacchivalue, then it will receive the default value, 101dcdfe824SRobert Mustacchi.Dv NULL . 102dcdfe824SRobert Mustacchi.Fn tss_get 103dcdfe824SRobert Mustacchimay be called from a tss destructor. 104dcdfe824SRobert Mustacchi.Ss Setting Values 105dcdfe824SRobert MustacchiThe 106dcdfe824SRobert Mustacchi.Fn tss_set 107dcdfe824SRobert Mustacchifunction sets the value of the key 108dcdfe824SRobert Mustacchi.Fa key 109dcdfe824SRobert Mustacchifor the callling thread to 110dcdfe824SRobert Mustacchi.Fa value , 111dcdfe824SRobert Mustacchiwhich may be obtained by subsequent calls to 112dcdfe824SRobert Mustacchi.Fa tss_get . 113dcdfe824SRobert MustacchiTo remove a value for a specific thread, one may pass 114dcdfe824SRobert Mustacchi.Dv NULL 115dcdfe824SRobert Mustacchiin as 116dcdfe824SRobert Mustacchi.Fa value . 117dcdfe824SRobert MustacchiChanging the value of a key with 118dcdfe824SRobert Mustacchi.Fn tss_set 119dcdfe824SRobert Mustacchidoes not cause any destructors to be invoked. This means that 120dcdfe824SRobert Mustacchi.Fn tss_set 121dcdfe824SRobert Mustacchimay be used in the context of a destructor, but special care must be 122dcdfe824SRobert Mustacchitaken to avoid leaking storage or causing an infinite loop. 123dcdfe824SRobert Mustacchi.Sh RETURN VALUES 124dcdfe824SRobert MustacchiUpon successful completion, the 125dcdfe824SRobert Mustacchi.Fn tss_create 126dcdfe824SRobert Mustacchiand 127dcdfe824SRobert Mustacchi.Fn tss_set 128dcdfe824SRobert Mustacchifunctions return 129dcdfe824SRobert Mustacchi.Sy thrd_success . 130dcdfe824SRobert MustacchiOtherwise, they return 131dcdfe824SRobert Mustacchi.Sy thrd_error 132dcdfe824SRobert Mustacchito indicate that an error occurred. 133dcdfe824SRobert Mustacchi.Pp 134dcdfe824SRobert MustacchiUpon successful completion, the 135dcdfe824SRobert Mustacchi.Fn tss_get 136dcdfe824SRobert Mustacchifunction returns the thread-specific value associated with the given 137dcdfe824SRobert Mustacchi.Fa key . 138dcdfe824SRobert MustacchiIf no thread-specific value is associated with the key or an invalid key 139dcdfe824SRobert Mustacchiwas passed in, then 140dcdfe824SRobert Mustacchi.Dv NULL 141dcdfe824SRobert Mustacchiis returned. 142dcdfe824SRobert Mustacchi.Sh INTERFACE STABILITY 143dcdfe824SRobert Mustacchi.Sy Standard 144dcdfe824SRobert Mustacchi.Sh MT-LEVEL 145dcdfe824SRobert Mustacchi.Sy MT-Safe 146dcdfe824SRobert Mustacchi.Sh SEE ALSO 147dcdfe824SRobert Mustacchi.Xr pthread_getspecific 3C , 148dcdfe824SRobert Mustacchi.Xr pthread_key_create 3C , 149dcdfe824SRobert Mustacchi.Xr pthread_key_delete 3C , 150dcdfe824SRobert Mustacchi.Xr pthread_setspecific 3C , 151dcdfe824SRobert Mustacchi.Xr attributes 5 152