s3-libsmbclient: Add missing talloc_stackframe() calls
authorAndrew Bartlett <abartlet@samba.org>
Sun, 29 Jul 2012 01:25:04 +0000 (11:25 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Sun, 29 Jul 2012 03:21:23 +0000 (05:21 +0200)
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

source3/libsmb/libsmb_context.c

index 502bb0d16a9e7ebc6a2cebfe0ff727f3a9ebfb5b..b529cbe7e3b852436a98a3879c21e5f2e9ab7b24 100644 (file)
@@ -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);
 }