mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
talloc: use atexit() again instead of a library destructor
The change for https://bugzilla.samba.org/show_bug.cgi?id=7587
("talloc_autofree_context() in shared libraries and plugins is a bad idea on FreeBSD")
(ommit 41b6810ba0
)
causes the following for sssd on Linux:
Stack trace of thread 19667:
#0 0x00007f2cab91ff6b __GI_raise (libc.so.6)
#1 0x00007f2cab90a5c1 __GI_abort (libc.so.6)
#2 0x00007f2cab90a491 __assert_fail_base (libc.so.6)
#3 0x00007f2cab9186e2 __GI___assert_fail (libc.so.6)
#4 0x00007f2cb10aaca5 k5_mutex_lock (libkrb5.so.3)
#5 0x00007f2cb10ab790 k5_mutex_lock (libkrb5.so.3)
#6 0x00007f2cb10ab8f5 profile_free_file (libkrb5.so.3)
#7 0x00007f2cb10ab983 profile_close_file (libkrb5.so.3)
#8 0x00007f2cb10af249 profile_release (libkrb5.so.3)
#9 0x00007f2cb10a06c7 k5_os_free_context (libkrb5.so.3)
#10 0x00007f2cb1075a9a krb5_free_context (libkrb5.so.3)
#11 0x000055cea7cb2dd1 kcm_data_destructor (sssd_kcm)
#12 0x00007f2cac153e96 _tc_free_internal (libtalloc.so.2)
#13 0x00007f2cac1537b0 _tc_free_internal (libtalloc.so.2)
#14 0x00007f2cac1537b0 _tc_free_internal (libtalloc.so.2)
#15 0x00007f2cac1537b0 _tc_free_internal (libtalloc.so.2)
#16 0x00007f2cac1537b0 _tc_free_internal (libtalloc.so.2)
#17 0x00007f2cac14e648 _talloc_free (libtalloc.so.2)
#18 0x00007f2cac14c480 talloc_lib_fini (libtalloc.so.2)
#19 0x00007f2cb151da96 _dl_fini (ld-linux-x86-64.so.2)
#20 0x00007f2cab9226bc __run_exit_handlers (libc.so.6)
#21 0x00007f2cab9227ec __GI_exit (libc.so.6)
#22 0x00007f2cb030dc61 orderly_shutdown (libsss_util.so)
#23 0x00007f2cac365a46 tevent_common_check_signal (libtevent.so.0)
#24 0x00007f2cac367975 epoll_event_loop_once (libtevent.so.0)
#25 0x00007f2cac365dab std_event_loop_once (libtevent.so.0)
#26 0x00007f2cac362098 _tevent_loop_once (libtevent.so.0)
#27 0x00007f2cac3622eb tevent_common_loop_wait (libtevent.so.0)
#28 0x00007f2cac365d3b std_event_loop_wait (libtevent.so.0)
#29 0x00007f2cb030eb37 server_loop (libsss_util.so)
#30 0x000055cea7cb29f4 main (sssd_kcm)
#31 0x00007f2cab90c1eb __libc_start_main (libc.so.6)
#32 0x000055cea7cb2c7a _start (sssd_kcm)
We still only register one atexit handler instead of multiple ones
like in talloc 2.1.11, but avoids using a library destructor.
Bug #7587 seems to be fixed by not using talloc_autofree_context()
within samba.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13366
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
parent
707af5b31b
commit
03124c85f1
@ -430,12 +430,7 @@ void talloc_lib_init(void)
|
||||
#warning "No __attribute__((constructor)) support found on this platform, additional talloc security measures not available"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DESTRUCTOR_ATTRIBUTE
|
||||
void talloc_lib_fini(void) __attribute__((destructor));
|
||||
void talloc_lib_fini(void)
|
||||
#else /* ! HAVE_DESTRUCTOR_ATTRIBUTE */
|
||||
static void talloc_lib_fini(void)
|
||||
#endif /* ! HAVE_DESTRUCTOR_ATTRIBUTE */
|
||||
static void talloc_lib_atexit(void)
|
||||
{
|
||||
TALLOC_FREE(autofree_context);
|
||||
|
||||
@ -452,17 +447,14 @@ static void talloc_lib_fini(void)
|
||||
|
||||
static void talloc_setup_atexit(void)
|
||||
{
|
||||
#ifndef HAVE_DESTRUCTOR_ATTRIBUTE
|
||||
static bool done;
|
||||
|
||||
if (done) {
|
||||
return;
|
||||
}
|
||||
|
||||
#warning "No __attribute__((destructor)) support found on this platform, using atexit"
|
||||
atexit(talloc_lib_fini);
|
||||
atexit(talloc_lib_atexit);
|
||||
done = true;
|
||||
#endif /* ! HAVE_DESTRUCTOR_ATTRIBUTE */
|
||||
}
|
||||
|
||||
static void talloc_log(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2);
|
||||
|
Loading…
Reference in New Issue
Block a user