xref: /illumos-gate/usr/src/man/man3c/tss.3c (revision bbf215553c7233fbab8a0afdf1fac74c44781867)
1fc2512cfSRobert Mustacchi.\"
2fc2512cfSRobert Mustacchi.\" This file and its contents are supplied under the terms of the
3fc2512cfSRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0.
4fc2512cfSRobert Mustacchi.\" You may only use this file in accordance with the terms of version
5fc2512cfSRobert Mustacchi.\" 1.0 of the CDDL.
6fc2512cfSRobert Mustacchi.\"
7fc2512cfSRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this
8fc2512cfSRobert Mustacchi.\" source.  A copy of the CDDL is also available via the Internet at
9fc2512cfSRobert Mustacchi.\" http://www.illumos.org/license/CDDL.
10fc2512cfSRobert Mustacchi.\"
11fc2512cfSRobert Mustacchi.\"
12fc2512cfSRobert Mustacchi.\" Copyright 2016 Joyent, Inc.
13fc2512cfSRobert Mustacchi.\"
1473849e1aSPeter Tribble.Dd "November 8, 2020"
15fc2512cfSRobert Mustacchi.Dt TSS 3C
16fc2512cfSRobert Mustacchi.Os
17fc2512cfSRobert Mustacchi.Sh NAME
18fc2512cfSRobert Mustacchi.Nm tss ,
19fc2512cfSRobert Mustacchi.Nm tss_create ,
2073849e1aSPeter Tribble.Nm tss_delete ,
21fc2512cfSRobert Mustacchi.Nm tss_get ,
22fc2512cfSRobert Mustacchi.Nm tss_set
23fc2512cfSRobert Mustacchi.Nd thread-specific storage
24fc2512cfSRobert Mustacchi.Sh SYNOPSIS
25fc2512cfSRobert Mustacchi.In threads.h
26fc2512cfSRobert Mustacchi.Vt "typedef void (*tss_dtor_t)(void *);"
27fc2512cfSRobert Mustacchi.Ft int
28fc2512cfSRobert Mustacchi.Fo tss_create
29fc2512cfSRobert Mustacchi.Fa "tss_t *key"
30fc2512cfSRobert Mustacchi.Fa "tss_dtor_t dtor"
31fc2512cfSRobert Mustacchi.Fc
32fc2512cfSRobert Mustacchi.Ft void
33fc2512cfSRobert Mustacchi.Fo tss_delete
34fc2512cfSRobert Mustacchi.Fa "tss_t key"
35fc2512cfSRobert Mustacchi.Fc
36fc2512cfSRobert Mustacchi.Ft void *
37fc2512cfSRobert Mustacchi.Fo tss_get
38fc2512cfSRobert Mustacchi.Fa "tss_t key"
39fc2512cfSRobert Mustacchi.Fc
40fc2512cfSRobert Mustacchi.Ft int
41fc2512cfSRobert Mustacchi.Fo tss_set
42fc2512cfSRobert Mustacchi.Fa "tss_t key"
43fc2512cfSRobert Mustacchi.Fa "void *val"
44fc2512cfSRobert Mustacchi.Fc
45fc2512cfSRobert Mustacchi.Sh DESCRIPTION
46fc2512cfSRobert MustacchiThe
47fc2512cfSRobert Mustacchi.Sy tss
48fc2512cfSRobert Mustacchifamily of functions create, get, set, and destroy thread-specific
49fc2512cfSRobert Mustacchistorage.
5073849e1aSPeter Tribble.Ss Creating and Destroying Thread-Specific Storage
51fc2512cfSRobert MustacchiThe
52fc2512cfSRobert Mustacchi.Fn tss_create
5372d3dbb9SYuri Pankovfunction creates a new thread-specific data key.
5472d3dbb9SYuri PankovThe key space is opaque and global to all threads in the process.
5572d3dbb9SYuri PankovEach thread has its own value-space which can be manipulated with the
56fc2512cfSRobert Mustacchi.Fn tss_get
57fc2512cfSRobert Mustacchiand
58fc2512cfSRobert Mustacchi.Fn tss_set
5972d3dbb9SYuri Pankovfunctions.
6072d3dbb9SYuri PankovA given key persists until
6173849e1aSPeter Tribble.Fn tss_delete
62fc2512cfSRobert Mustacchiis called.
63fc2512cfSRobert Mustacchi.Pp
64fc2512cfSRobert MustacchiWhen a key is created, the value
65fc2512cfSRobert Mustacchi.Dv NULL
6672d3dbb9SYuri Pankovis associated with all current threads.
6772d3dbb9SYuri PankovWhen a thread is created, the value
68fc2512cfSRobert Mustacchi.Dv NULL
69fc2512cfSRobert Mustacchiis assigned as the value for the entire key-space.
70fc2512cfSRobert Mustacchi.Pp
71fc2512cfSRobert MustacchiA key may optionally be created with a destructor function
72fc2512cfSRobert Mustacchi.Fa dtor .
73fc2512cfSRobert MustacchiThe function
74fc2512cfSRobert Mustacchi.Fa dtor
75fc2512cfSRobert Mustacchiwill run when the thread exits (see
76fc2512cfSRobert Mustacchi.Xr thrd_exit 3C )
77fc2512cfSRobert Mustacchiif the value for the key is not
78fc2512cfSRobert Mustacchi.Dv NULL .
7972d3dbb9SYuri PankovThe key space's destructors may be run in any order.
8072d3dbb9SYuri PankovWhen the destructor is run due to a thread exiting, all signals will be blocked.
81fc2512cfSRobert Mustacchi.Pp
82fc2512cfSRobert MustacchiThe
83fc2512cfSRobert Mustacchi.Fn tss_delete
8473849e1aSPeter Tribblefunction deletes the key identified by
85fc2512cfSRobert Mustacchi.Fa key
8672d3dbb9SYuri Pankovfrom the global name-space.
8772d3dbb9SYuri PankovWhen a key is deleted, no registered destructor is called, it is up to the
8872d3dbb9SYuri Pankovcalling program to free any storage that was associated with
89fc2512cfSRobert Mustacchi.Fa key
9072d3dbb9SYuri Pankovacross all threads.
9173849e1aSPeter TribbleBecause of this property, it is legal to call
92fc2512cfSRobert Mustacchi.Fn tss_delete
9372d3dbb9SYuri Pankovfrom inside a destructor.
9473849e1aSPeter TribbleAny destructors that had been associated with
95fc2512cfSRobert Mustacchi.Fa key
96fc2512cfSRobert Mustacchiwill no longer be called when a thread terminates.
97fc2512cfSRobert Mustacchi.Ss Obtaining Values
98fc2512cfSRobert MustacchiThe
99fc2512cfSRobert Mustacchi.Fn tss_get
100fc2512cfSRobert Mustacchifunction may be used to obtain the value associated with
101fc2512cfSRobert Mustacchi.Fa key
10272d3dbb9SYuri Pankovfor the calling thread.
10372d3dbb9SYuri PankovNote that if the calling thread has never set a value, then it will receive the
10472d3dbb9SYuri Pankovdefault value,
105fc2512cfSRobert Mustacchi.Dv NULL .
106fc2512cfSRobert Mustacchi.Fn tss_get
107fc2512cfSRobert Mustacchimay be called from a tss destructor.
108fc2512cfSRobert Mustacchi.Ss Setting Values
109fc2512cfSRobert MustacchiThe
110fc2512cfSRobert Mustacchi.Fn tss_set
111fc2512cfSRobert Mustacchifunction sets the value of the key
112fc2512cfSRobert Mustacchi.Fa key
11373849e1aSPeter Tribblefor the calling thread to
114fc2512cfSRobert Mustacchi.Fa value ,
115fc2512cfSRobert Mustacchiwhich may be obtained by subsequent calls to
116fc2512cfSRobert Mustacchi.Fa tss_get .
117fc2512cfSRobert MustacchiTo remove a value for a specific thread, one may pass
118fc2512cfSRobert Mustacchi.Dv NULL
119fc2512cfSRobert Mustacchiin as
120fc2512cfSRobert Mustacchi.Fa value .
121fc2512cfSRobert MustacchiChanging the value of a key with
122fc2512cfSRobert Mustacchi.Fn tss_set
12372d3dbb9SYuri Pankovdoes not cause any destructors to be invoked.
12472d3dbb9SYuri PankovThis means that
125fc2512cfSRobert Mustacchi.Fn tss_set
126fc2512cfSRobert Mustacchimay be used in the context of a destructor, but special care must be
127fc2512cfSRobert Mustacchitaken to avoid leaking storage or causing an infinite loop.
128fc2512cfSRobert Mustacchi.Sh RETURN VALUES
129fc2512cfSRobert MustacchiUpon successful completion, the
130fc2512cfSRobert Mustacchi.Fn tss_create
131fc2512cfSRobert Mustacchiand
132fc2512cfSRobert Mustacchi.Fn tss_set
133fc2512cfSRobert Mustacchifunctions return
134fc2512cfSRobert Mustacchi.Sy thrd_success .
135fc2512cfSRobert MustacchiOtherwise, they return
136fc2512cfSRobert Mustacchi.Sy thrd_error
137fc2512cfSRobert Mustacchito indicate that an error occurred.
138fc2512cfSRobert Mustacchi.Pp
139fc2512cfSRobert MustacchiUpon successful completion, the
140fc2512cfSRobert Mustacchi.Fn tss_get
141fc2512cfSRobert Mustacchifunction returns the thread-specific value associated with the given
142fc2512cfSRobert Mustacchi.Fa key .
143fc2512cfSRobert MustacchiIf no thread-specific value is associated with the key or an invalid key
144fc2512cfSRobert Mustacchiwas passed in, then
145fc2512cfSRobert Mustacchi.Dv NULL
146fc2512cfSRobert Mustacchiis returned.
147fc2512cfSRobert Mustacchi.Sh INTERFACE STABILITY
148fc2512cfSRobert Mustacchi.Sy Standard
149fc2512cfSRobert Mustacchi.Sh MT-LEVEL
150fc2512cfSRobert Mustacchi.Sy MT-Safe
151fc2512cfSRobert Mustacchi.Sh SEE ALSO
152fc2512cfSRobert Mustacchi.Xr pthread_getspecific 3C ,
153fc2512cfSRobert Mustacchi.Xr pthread_key_create 3C ,
154fc2512cfSRobert Mustacchi.Xr pthread_key_delete 3C ,
155fc2512cfSRobert Mustacchi.Xr pthread_setspecific 3C ,
156*bbf21555SRichard Lowe.Xr attributes 7
157