From: Andrew Tridgell Date: Tue, 2 Jun 2009 07:25:47 +0000 (+1000) Subject: add NT_STATUS_HAVE_NO_MEMORY_AND_FREE() X-Git-Tag: tdb-1.1.5~314 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da3ee2790089e771689afbebef021a8c8c776306;p=thirdparty%2Fsamba.git add NT_STATUS_HAVE_NO_MEMORY_AND_FREE() In many places we use NT_STATUS_HAVE_NO_MEMORY() to auto-return when a memory allocation fails. In quite a few places where we use this, we end up leaving a tmp_ctx behind, which creates a memory leak. This macro takes a memory context to free when returning the error --- diff --git a/libcli/util/ntstatus.h b/libcli/util/ntstatus.h index a97ef5337e2..dc1fcc41a4f 100644 --- a/libcli/util/ntstatus.h +++ b/libcli/util/ntstatus.h @@ -651,6 +651,15 @@ extern bool ntstatus_check_dos_mapping; }\ } while (0) +/* This varient is for when you want to free a local + temporary memory context in the error path */ +#define NT_STATUS_HAVE_NO_MEMORY_AND_FREE(x, ctx) do { \ + if (!(x)) {\ + talloc_free(ctx); \ + return NT_STATUS_NO_MEMORY;\ + }\ +} while (0) + #define NT_STATUS_IS_OK_RETURN(x) do { \ if (NT_STATUS_IS_OK(x)) {\ return x;\