From 0da1f5dc5cf0ddf7aadbb713ee1291ef6fb6ede0 Mon Sep 17 00:00:00 2001 From: Jay Satiro Date: Fri, 31 Jul 2015 01:58:03 -0400 Subject: [PATCH] libcurl-thread.3: Warn memory functions must be thread safe Bug: http://curl.haxx.se/mail/lib-2015-07/0149.html Reported-by: Eric Ridge --- docs/libcurl/curl_global_init_mem.3 | 9 ++++++--- docs/libcurl/libcurl-thread.3 | 13 +++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/docs/libcurl/curl_global_init_mem.3 b/docs/libcurl/curl_global_init_mem.3 index 9cddef7c3..491550e22 100644 --- a/docs/libcurl/curl_global_init_mem.3 +++ b/docs/libcurl/curl_global_init_mem.3 @@ -36,9 +36,9 @@ This function works exactly as \fIcurl_global_init(3)\fP with one addition: it allows the application to set callbacks to replace the otherwise used internal memory functions. -This man page only adds documentation for the callbacks, see the -\fIcurl_global_init(3)\fP man page for all the rest. When you use this -function, all callback arguments must be set to valid function pointers. +When you use this function, all callback arguments must be set to valid +function pointers. \fBIf you are using libcurl with multiple threads the +callback replacement functions must be thread safe.\fP The prototypes for the given callbacks should match these: .IP "void *malloc_callback(size_t size);" @@ -51,6 +51,9 @@ To replace realloc() To replace strdup() .IP "void *calloc_callback(size_t nmemb, size_t size);" To replace calloc() +.RE +This function is otherwise the same as \fIcurl_global_init(3)\fP, please refer +to that man page for documentation. .SH "CAUTION" Manipulating these gives considerable powers to the application to severely screw things up for libcurl. Take care! diff --git a/docs/libcurl/libcurl-thread.3 b/docs/libcurl/libcurl-thread.3 index 745ce474e..b16caa2e8 100644 --- a/docs/libcurl/libcurl-thread.3 +++ b/docs/libcurl/libcurl-thread.3 @@ -101,9 +101,14 @@ are Linux, Solaris and Windows. \fBcurl_global_* functions.\fP These functions are not thread safe. If you are using libcurl with multiple threads it is especially important that before use -you call \fIcurl_global_init(3)\fP to explicitly initialize the library and its -dependents, rather than rely on the "lazy" fail-safe initialization that takes -place the first time \fIcurl_easy_init(3)\fP is called. For an in-depth -explanation refer to \fIlibcurl(3)\fP section \fBGLOBAL CONSTANTS\fP. +you call \fIcurl_global_init(3)\fP or \fIcurl_global_init_mem(3)\fP to +explicitly initialize the library and its dependents, rather than rely on the +"lazy" fail-safe initialization that takes place the first time +\fIcurl_easy_init(3)\fP is called. For an in-depth explanation refer to +\fIlibcurl(3)\fP section \fBGLOBAL CONSTANTS\fP. + +\fBMemory functions.\fP These functions, provided either by your operating +system or your own replacements, must be thread safe. You can use +\fIcurl_global_init_mem(3)\fP to set your own replacement memory functions. \fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP is not thread-safe.