Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/curl/docs/libcurl/libcurl-thread.3 @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 .\" ************************************************************************** | |
| 2 .\" * _ _ ____ _ | |
| 3 .\" * Project ___| | | | _ \| | | |
| 4 .\" * / __| | | | |_) | | | |
| 5 .\" * | (__| |_| | _ <| |___ | |
| 6 .\" * \___|\___/|_| \_\_____| | |
| 7 .\" * | |
| 8 .\" * Copyright (C) 2015 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. | |
| 9 .\" * | |
| 10 .\" * This software is licensed as described in the file COPYING, which | |
| 11 .\" * you should have received as part of this distribution. The terms | |
| 12 .\" * are also available at https://curl.haxx.se/docs/copyright.html. | |
| 13 .\" * | |
| 14 .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell | |
| 15 .\" * copies of the Software, and permit persons to whom the Software is | |
| 16 .\" * furnished to do so, under the terms of the COPYING file. | |
| 17 .\" * | |
| 18 .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | |
| 19 .\" * KIND, either express or implied. | |
| 20 .\" * | |
| 21 .\" ************************************************************************** | |
| 22 .\" | |
| 23 .TH libcurl-thread 3 "13 Jul 2015" "libcurl" "libcurl thread safety" | |
| 24 .SH NAME | |
| 25 libcurl-thread \- libcurl thread safety | |
| 26 .SH "Multi-threading with libcurl" | |
| 27 libcurl is thread safe but has no internal thread synchronization. You may have | |
| 28 to provide your own locking should you meet any of the thread safety exceptions | |
| 29 below. | |
| 30 | |
| 31 \fBHandles.\fP You must \fBnever\fP share the same handle in multiple threads. | |
| 32 You can pass the handles around among threads, but you must never use a single | |
| 33 handle from more than one thread at any given time. | |
| 34 | |
| 35 \fBShared objects.\fP You can share certain data between multiple handles by | |
| 36 using the share interface but you must provide your own locking and set | |
| 37 \fIcurl_share_setopt(3)\fP CURLSHOPT_LOCKFUNC and CURLSHOPT_UNLOCKFUNC. | |
| 38 .SH TLS | |
| 39 If you are accessing HTTPS or FTPS URLs in a multi-threaded manner, you are | |
| 40 then of course using the underlying SSL library multi-threaded and those libs | |
| 41 might have their own requirements on this issue. You may need to provide one | |
| 42 or two functions to allow it to function properly: | |
| 43 .IP OpenSSL | |
| 44 OpenSSL 1.1.0+ "can be safely used in multi-threaded applications provided that | |
| 45 support for the underlying OS threading API is built-in." In that case the | |
| 46 engine is used by libcurl in a way that is fully thread-safe. | |
| 47 | |
| 48 https://www.openssl.org/docs/man1.1.0/man3/CRYPTO_THREAD_run_once.html#DESCRIPTION | |
| 49 | |
| 50 OpenSSL <= 1.0.2 the user must set callbacks. | |
| 51 | |
| 52 https://www.openssl.org/docs/man1.0.2/man3/CRYPTO_set_locking_callback.html#DESCRIPTION | |
| 53 | |
| 54 https://curl.haxx.se/libcurl/c/opensslthreadlock.html | |
| 55 | |
| 56 .IP GnuTLS | |
| 57 https://gnutls.org/manual/html_node/Thread-safety.html | |
| 58 .IP NSS | |
| 59 thread-safe already without anything required. | |
| 60 .IP Secure-Transport | |
| 61 The engine is used by libcurl in a way that is fully thread-safe. | |
| 62 .IP WinSSL | |
| 63 The engine is used by libcurl in a way that is fully thread-safe. | |
| 64 .IP wolfSSL | |
| 65 The engine is used by libcurl in a way that is fully thread-safe. | |
| 66 .IP BoringSSL | |
| 67 The engine is used by libcurl in a way that is fully thread-safe. | |
| 68 .SH "Other areas of caution" | |
| 69 .IP Signals | |
| 70 Signals are used for timing out name resolves (during DNS lookup) - when built | |
| 71 without using either the c-ares or threaded resolver backends. When using | |
| 72 multiple threads you should set the \fICURLOPT_NOSIGNAL(3)\fP option to 1L for | |
| 73 all handles. Everything will or might work fine except that timeouts are not | |
| 74 honored during the DNS lookup - which you can work around by building libcurl | |
| 75 with c-ares or threaded-resolver support. c-ares is a library that provides | |
| 76 asynchronous name resolves. On some platforms, libcurl simply will not | |
| 77 function properly multi-threaded unless the \fICURLOPT_NOSIGNAL(3)\fP option | |
| 78 is set. | |
| 79 | |
| 80 When \fICURLOPT_NOSIGNAL(3)\fP is set to 1L, your application needs to deal | |
| 81 with the risk of a SIGPIPE (that at least the OpenSSL backend can | |
| 82 trigger). Note that setting \fICURLOPT_NOSIGNAL(3)\fP to 0L will not work in a | |
| 83 threaded situation as there will be race where libcurl risks restoring the | |
| 84 former signal handler while another thread should still ignore it. | |
| 85 .IP "Name resolving" | |
| 86 \fBgethostby* functions and other system calls.\fP These functions, provided | |
| 87 by your operating system, must be thread safe. It is very important that | |
| 88 libcurl can find and use thread safe versions of these and other system calls, | |
| 89 as otherwise it can't function fully thread safe. Some operating systems are | |
| 90 known to have faulty thread implementations. We have previously received | |
| 91 problem reports on *BSD (at least in the past, they may be working fine these | |
| 92 days). Some operating systems that are known to have solid and working thread | |
| 93 support are Linux, Solaris and Windows. | |
| 94 .IP "curl_global_* functions" | |
| 95 These functions are not thread safe. If you are using libcurl with multiple | |
| 96 threads it is especially important that before use you call | |
| 97 \fIcurl_global_init(3)\fP or \fIcurl_global_init_mem(3)\fP to explicitly | |
| 98 initialize the library and its dependents, rather than rely on the "lazy" | |
| 99 fail-safe initialization that takes place the first time | |
| 100 \fIcurl_easy_init(3)\fP is called. For an in-depth explanation refer to | |
| 101 \fIlibcurl(3)\fP section \fBGLOBAL CONSTANTS\fP. | |
| 102 .IP "Memory functions" | |
| 103 These functions, provided either by your operating system or your own | |
| 104 replacements, must be thread safe. You can use \fIcurl_global_init_mem(3)\fP | |
| 105 to set your own replacement memory functions. | |
| 106 .IP "Non-safe functions" | |
| 107 \fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP is not thread-safe. |
