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