1
0
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:
Jeremy Allison 2010-06-10 13:17:35 -07:00
parent 405a0c558c
commit b5638a0560
3 changed files with 19 additions and 3 deletions

View File

@ -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) {

View File

@ -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");

View File

@ -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;