diff options
author | Andrew Bartlett <abartlet@samba.org> | 2012-07-29 11:25:04 +1000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2012-07-29 05:21:23 +0200 |
commit | 9c9df9c8a320741f13e129f768f3df77949e939a (patch) | |
tree | 6a755f16e50cfeb61bfea751e18647932dc12f48 | |
parent | 6a37b55dfb2d8e6683538400d41c2b139a553eaa (diff) | |
download | samba-9c9df9c8a320741f13e129f768f3df77949e939a.tar.gz samba-9c9df9c8a320741f13e129f768f3df77949e939a.tar.bz2 samba-9c9df9c8a320741f13e129f768f3df77949e939a.zip |
s3-libsmbclient: Add missing talloc_stackframe() calls
These caused a panic with the new assertion on the talloc stackframe being
in place.
Andrew Bartlett
Autobuild-User(master): Andrew Bartlett <abartlet@samba.org>
Autobuild-Date(master): Sun Jul 29 05:21:24 CEST 2012 on sn-devel-104
-rw-r--r-- | source3/libsmb/libsmb_context.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/source3/libsmb/libsmb_context.c b/source3/libsmb/libsmb_context.c index 502bb0d16a..b529cbe7e3 100644 --- a/source3/libsmb/libsmb_context.c +++ b/source3/libsmb/libsmb_context.c @@ -123,9 +123,11 @@ SMBC_module_init(void * punused) static void SMBC_module_terminate(void) { + TALLOC_CTX *frame = talloc_stackframe(); secrets_shutdown(); gfree_all(); SMBC_initialized = false; + TALLOC_FREE(frame); } @@ -136,6 +138,7 @@ SMBCCTX * smbc_new_context(void) { SMBCCTX *context; + TALLOC_CTX *frame = talloc_stackframe(); /* The first call to this function should initialize the module */ SMB_THREAD_ONCE(&SMBC_initialized, SMBC_module_init, NULL); @@ -146,6 +149,7 @@ smbc_new_context(void) */ context = SMB_MALLOC_P(SMBCCTX); if (!context) { + TALLOC_FREE(frame); errno = ENOMEM; return NULL; } @@ -154,6 +158,7 @@ smbc_new_context(void) context->internal = SMB_MALLOC_P(struct SMBC_internal_data); if (!context->internal) { + TALLOC_FREE(frame); SAFE_FREE(context); errno = ENOMEM; return NULL; @@ -221,6 +226,7 @@ smbc_new_context(void) smbc_setFunctionListPrintJobs(context, SMBC_list_print_jobs_ctx); smbc_setFunctionUnlinkPrintJob(context, SMBC_unlink_print_job_ctx); + TALLOC_FREE(frame); return context; } @@ -235,11 +241,14 @@ int smbc_free_context(SMBCCTX *context, int shutdown_ctx) { + TALLOC_CTX *frame; if (!context) { errno = EBADF; return 1; } + frame = talloc_stackframe(); + if (shutdown_ctx) { SMBCFILE * f; DEBUG(1,("Performing aggressive shutdown.\n")); @@ -278,18 +287,21 @@ smbc_free_context(SMBCCTX *context, DEBUG(1, ("Could not purge all servers, " "free_context failed.\n")); errno = EBUSY; + TALLOC_FREE(frame); return 1; } if (context->internal->servers) { DEBUG(1, ("Active servers in context, " "free_context failed.\n")); errno = EBUSY; + TALLOC_FREE(frame); return 1; } if (context->internal->files) { DEBUG(1, ("Active files in context, " "free_context failed.\n")); errno = EBUSY; + TALLOC_FREE(frame); return 1; } } @@ -325,6 +337,7 @@ smbc_free_context(SMBCCTX *context, smb_panic("error unlocking 'initialized_ctx_count'"); } + TALLOC_FREE(frame); return 0; } @@ -347,6 +360,8 @@ smbc_option_set(SMBCCTX *context, const char *s; } option_value; + TALLOC_CTX *frame = talloc_stackframe(); + va_start(ap, option_name); if (strcmp(option_name, "debug_to_stderr") == 0) { @@ -413,6 +428,7 @@ smbc_option_set(SMBCCTX *context, } va_end(ap); + TALLOC_FREE(frame); } |