mirror of
https://github.com/samba-team/samba.git
synced 2025-02-03 13:47:25 +03:00
talloc: Add a warning about talloc_autofree_context() and dlclose()
This commit is contained in:
parent
e90c707f14
commit
e325a5b674
@ -972,6 +972,15 @@ int talloc_unlink(const void *context, void *ptr);
|
||||
* which will be automatically freed on program exit. This can be used
|
||||
* to reduce the noise in memory leak reports.
|
||||
*
|
||||
* Never use this in code that might be used in objects loaded with
|
||||
* dlopen and unloaded with dlclose. 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.
|
||||
*
|
||||
* @return A talloc context, NULL on error.
|
||||
*/
|
||||
void *talloc_autofree_context(void);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user