summaryrefslogtreecommitdiff
path: root/lib/talloc/talloc_guide.txt
diff options
context:
space:
mode:
Diffstat (limited to 'lib/talloc/talloc_guide.txt')
-rw-r--r--lib/talloc/talloc_guide.txt13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/talloc/talloc_guide.txt b/lib/talloc/talloc_guide.txt
index a79fd03a831..f29b1d699a8 100644
--- a/lib/talloc/talloc_guide.txt
+++ b/lib/talloc/talloc_guide.txt
@@ -74,6 +74,19 @@ without proper synchronization ;
shouldn't be used by several threads simultaneously without
synchronization.
+talloc and shared objects
+-------------------------
+
+talloc can be used in shared objects. Special care needs to be taken
+to never use talloc_autofree_context() in code that might be loaded
+with dlopen() and unloaded with dlclose(), as talloc_autofree_context()
+internally uses atexit(3). Some platforms like modern Linux handles
+this fine, but for example FreeBSD does not deal well with dlopen()
+and atexit() used simultaneously: dlclose() does not clean up the list
+of atexit-handlers, so when the program exits the code that was
+registered from within talloc_autofree_context() is gone, the program
+crashes at exit.
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
(type *)talloc(const void *context, type);