xref: /openbsd/lib/libcrypto/man/CRYPTO_lock.3 (revision e5dd7070)
1.\"	$OpenBSD: CRYPTO_lock.3,v 1.1 2019/03/10 15:00:34 schwarze Exp $
2.\"	OpenSSL doc/crypto/threads.pod fb552ac6 Sep 30 23:43:01 2009 +0000
3.\"
4.\" Copyright (c) 2019 Ingo Schwarze <schwarze@openbsd.org>
5.\"
6.\" Permission to use, copy, modify, and distribute this software for any
7.\" purpose with or without fee is hereby granted, provided that the above
8.\" copyright notice and this permission notice appear in all copies.
9.\"
10.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17.\"
18.Dd $Mdocdate: March 10 2019 $
19.Dt CRYPTO_LOCK 3
20.Os
21.Sh NAME
22.Nm CRYPTO_THREADID_current ,
23.Nm CRYPTO_THREADID_cmp ,
24.Nm CRYPTO_THREADID_cpy ,
25.Nm CRYPTO_THREADID_hash ,
26.Nm CRYPTO_lock ,
27.Nm CRYPTO_w_lock ,
28.Nm CRYPTO_w_unlock ,
29.Nm CRYPTO_r_lock ,
30.Nm CRYPTO_r_unlock ,
31.Nm CRYPTO_add
32.Nd thread support
33.Sh SYNOPSIS
34.In openssl/crypto.h
35.Ft void
36.Fo CRYPTO_THREADID_current
37.Fa "CRYPTO_THREADID *id"
38.Fc
39.Ft int
40.Fo CRYPTO_THREADID_cmp
41.Fa "const CRYPTO_THREADID *a"
42.Fa "const CRYPTO_THREADID *b"
43.Fc
44.Ft void
45.Fo CRYPTO_THREADID_cpy
46.Fa "CRYPTO_THREADID *dest"
47.Fa "const CRYPTO_THREADID *src"
48.Fc
49.Ft unsigned long
50.Fo CRYPTO_THREADID_hash
51.Fa "const CRYPTO_THREADID *id"
52.Fc
53.Ft void
54.Fo CRYPTO_lock
55.Fa "int mode"
56.Fa "int type"
57.Fa "const char *file"
58.Fa "int line"
59.Fc
60.Ft int
61.Fo CRYPTO_add
62.Fa "int *p"
63.Fa "int amount"
64.Fa "int type"
65.Fc
66.Bd -literal
67#define	CRYPTO_w_lock(type) \e
68	CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE, type, __FILE__, __LINE__)
69#define	CRYPTO_w_unlock(type) \e
70	CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE, type, __FILE__, __LINE__)
71#define	CRYPTO_r_lock(type) \e
72	CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ, type, __FILE__, __LINE__)
73#define	CRYPTO_r_unlock(type) \e
74	CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ, type, __FILE__, __LINE__)
75.Ed
76.Sh DESCRIPTION
77These functions are obsolete.
78.Pp
79.Fn CRYPTO_THREADID_current
80stores a unique identifier of the currently executing thread
81into the opaque object
82.Fa id .
83.Pp
84.Fn CRYPTO_THREADID_cpy
85copies the contents of
86.Fa src
87to
88.Fa dest .
89.Pp
90.Fn CRYPTO_lock
91locks or unlocks a mutex lock.
92.Pp
93.Fa mode
94is a bitfield describing what should be done with the lock.
95For each call, either
96.Dv CRYPTO_LOCK
97or
98.Dv CRYPTO_UNLOCK
99must be included.
100In the LibreSSL implementation,
101.Dv CRYPTO_READ
102and
103.Dv CRYPTO_WRITE
104are ignored.
105.Pp
106.Fa type
107is a number in the range 0 <=
108.Fa type No < Dv CRYPTO_NUM_LOCKS
109identifying a particular lock.
110Currently, the value of
111.Dv CRYPTO_NUM_LOCKS
112is 41.
113.Pp
114The
115.Ar file
116and
117.Ar line
118arguments are ignored.
119.Pp
120In the LibreSSL implementation,
121.Fn CRYPTO_lock
122is a wrapper around
123.Xr pthread_mutex_lock 3
124and
125.Xr pthread_mutex_unlock 3 .
126.Pp
127.Fn CRYPTO_add
128locks the lock number
129.Fa type ,
130adds
131.Fa amount
132to
133.Pf * Fa p ,
134and unlocks the lock number
135.Fa type
136again.
137.Sh RETURN VALUES
138.Fn CRYPTO_THREADID_cmp
139returns 0 if
140.Fa a
141and
142.Fa b
143refer to the same thread or a non-zero value otherwise.
144.Pp
145.Fn CRYPTO_THREADID_hash
146returns a numeric value usable as a hash-table key.
147In the LibreSSL implementation, it is the value returned from
148.Xr pthread_self 3
149for the thread
150.Fa id .
151.Pp
152.Fn CRYPTO_add
153returns the new value of
154.Pf * Fa p .
155.Sh SEE ALSO
156.Xr crypto 3
157.Sh HISTORY
158.Fn CRYPTO_lock ,
159.Fn CRYPTO_w_lock ,
160.Fn CRYPTO_w_unlock ,
161.Fn CRYPTO_r_lock ,
162and
163.Fn CRYPTO_r_unlock
164first appeared in SSLeay 0.6.0.
165.Fn CRYPTO_add
166first appeared in SSLeay 0.6.2.
167These functions have been available since
168.Ox 2.4 .
169.Pp
170.Fn CRYPTO_THREADID_current ,
171.Fn CRYPTO_THREADID_cmp ,
172.Fn CRYPTO_THREADID_cpy ,
173and
174.Fn CRYPTO_THREADID_hash
175first appeared in OpenSSL 1.0.0 and have been available since
176.Ox 4.9 .
177