xref: /illumos-gate/usr/src/man/man3c/tss.3c (revision 72d3dbb9ab4481606cb93caca98ba3b3a8eb6ce2)
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.\"
14fc2512cfSRobert Mustacchi.Dd "Jan 11, 2015"
15fc2512cfSRobert Mustacchi.Dt TSS 3C
16fc2512cfSRobert Mustacchi.Os
17fc2512cfSRobert Mustacchi.Sh NAME
18fc2512cfSRobert Mustacchi.Nm tss ,
19fc2512cfSRobert Mustacchi.Nm tss_create ,
20fc2512cfSRobert Mustacchi.Nm tss_destroy ,
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.
50fc2512cfSRobert Mustacchi.Ss Creating and Destorying Thread-Specific Storage
51fc2512cfSRobert MustacchiThe
52fc2512cfSRobert Mustacchi.Fn tss_create
53*72d3dbb9SYuri Pankovfunction creates a new thread-specific data key.
54*72d3dbb9SYuri PankovThe key space is opaque and global to all threads in the process.
55*72d3dbb9SYuri 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
59*72d3dbb9SYuri Pankovfunctions.
60*72d3dbb9SYuri PankovA given key persists until
61fc2512cfSRobert Mustacchi.Fn tss_destroy
62fc2512cfSRobert Mustacchiis called.
63fc2512cfSRobert Mustacchi.Pp
64fc2512cfSRobert MustacchiWhen a key is created, the value
65fc2512cfSRobert Mustacchi.Dv NULL
66*72d3dbb9SYuri Pankovis associated with all current threads.
67*72d3dbb9SYuri 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 .
79*72d3dbb9SYuri PankovThe key space's destructors may be run in any order.
80*72d3dbb9SYuri 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
84fc2512cfSRobert Mustacchifunction deletes the key identify by
85fc2512cfSRobert Mustacchi.Fa key
86*72d3dbb9SYuri Pankovfrom the global name-space.
87*72d3dbb9SYuri PankovWhen a key is deleted, no registered destructor is called, it is up to the
88*72d3dbb9SYuri Pankovcalling program to free any storage that was associated with
89fc2512cfSRobert Mustacchi.Fa key
90*72d3dbb9SYuri Pankovacross all threads.
91*72d3dbb9SYuri PankovBecause of this propety, it is legal to call
92fc2512cfSRobert Mustacchi.Fn tss_delete
93*72d3dbb9SYuri Pankovfrom inside a destructor.
94*72d3dbb9SYuri PankovAny destructors that had been assocaited 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
102*72d3dbb9SYuri Pankovfor the calling thread.
103*72d3dbb9SYuri PankovNote that if the calling thread has never set a value, then it will receive the
104*72d3dbb9SYuri 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
113fc2512cfSRobert Mustacchifor the callling 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
123*72d3dbb9SYuri Pankovdoes not cause any destructors to be invoked.
124*72d3dbb9SYuri 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 ,
156fc2512cfSRobert Mustacchi.Xr attributes 5
157