mirror of
https://github.com/samba-team/samba.git
synced 2025-02-26 21:57:41 +03:00
Don't use the autofree context for the globals. This causes child smbd's forked
by modules to crash due to destructors being called (found when using the vfs_aio_fork module with smb2). Jeremy.
This commit is contained in:
parent
405a0c558c
commit
b5638a0560
@ -125,7 +125,12 @@ struct smbd_server_connection *smbd_server_conn = NULL;
|
||||
struct messaging_context *smbd_messaging_context(void)
|
||||
{
|
||||
if (smbd_msg_ctx == NULL) {
|
||||
smbd_msg_ctx = messaging_init(talloc_autofree_context(),
|
||||
/*
|
||||
* Note we MUST use the NULL context here, not the
|
||||
* autofree context, to avoid side effects in forked
|
||||
* children exiting.
|
||||
*/
|
||||
smbd_msg_ctx = messaging_init(NULL,
|
||||
procid_self(),
|
||||
smbd_event_context());
|
||||
}
|
||||
@ -138,7 +143,12 @@ struct messaging_context *smbd_messaging_context(void)
|
||||
struct memcache *smbd_memcache(void)
|
||||
{
|
||||
if (!smbd_memcache_ctx) {
|
||||
smbd_memcache_ctx = memcache_init(talloc_autofree_context(),
|
||||
/*
|
||||
* Note we MUST use the NULL context here, not the
|
||||
* autofree context, to avoid side effects in forked
|
||||
* children exiting.
|
||||
*/
|
||||
smbd_memcache_ctx = memcache_init(NULL,
|
||||
lp_max_stat_cache_size()*1024);
|
||||
}
|
||||
if (!smbd_memcache_ctx) {
|
||||
|
@ -50,7 +50,12 @@ int get_client_fd(void)
|
||||
struct event_context *smbd_event_context(void)
|
||||
{
|
||||
if (!smbd_event_ctx) {
|
||||
smbd_event_ctx = event_context_init(talloc_autofree_context());
|
||||
/*
|
||||
* Note we MUST use the NULL context here, not the
|
||||
* autofree context, to avoid side effects in forked
|
||||
* children exiting.
|
||||
*/
|
||||
smbd_event_ctx = event_context_init(NULL);
|
||||
}
|
||||
if (!smbd_event_ctx) {
|
||||
smb_panic("Could not init smbd event context");
|
||||
|
@ -121,6 +121,7 @@ static void exit_server_common(enum server_exit_reason how,
|
||||
TALLOC_FREE(smbd_server_conn);
|
||||
TALLOC_FREE(smbd_msg_ctx);
|
||||
TALLOC_FREE(smbd_event_ctx);
|
||||
TALLOC_FREE(smbd_memcache_ctx);
|
||||
|
||||
if (how != SERVER_EXIT_NORMAL) {
|
||||
int oldlevel = DEBUGLEVEL;
|
||||
|
Loading…
x
Reference in New Issue
Block a user