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