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