r1984: this change is what you should read to understand the new talloc()
authorAndrew Tridgell <tridge@samba.org>
Sat, 21 Aug 2004 02:07:12 +0000 (02:07 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:58:14 +0000 (12:58 -0500)
It simplifies our structure handling a lot, making the code shorter
and easier to understand. Look at the diff carefully and see if you
can understand it. If you're still confused then please ask.

source/include/cli_context.h
source/libcli/raw/clitransport.c
source/libcli/raw/rawrequest.c

index f289d5b54688fcdb3a657d8a86f9e1e2c7628552..9013d3d0712b121d08e9e4d60e3c5bdff2223aba 100644 (file)
@@ -244,9 +244,6 @@ struct smbcli_request {
        /* allow a request to be part of a list of requests */
        struct smbcli_request *next, *prev;
 
-       /* a talloc context for the lifetime of this request */
-       TALLOC_CTX *mem_ctx;
-       
        /* each request is in one of 4 possible states */
        enum smbcli_request_state state;
        
index 82939467ae7529d4aba3251cad426ff038cc8caa..5766fde03a1a91b215401e03d7dd364c1ece90b2 100644 (file)
@@ -325,7 +325,7 @@ static void smbcli_transport_finish_recv(struct smbcli_transport *transport)
                if (!req) goto error;
 
                req->in.buffer = buffer;
-               talloc_steal(req->mem_ctx, buffer);
+               talloc_steal(req, buffer);
                req->in.size = len;
                req->in.allocated = req->in.size;
                goto async;
@@ -349,7 +349,7 @@ static void smbcli_transport_finish_recv(struct smbcli_transport *transport)
 
        /* fill in the 'in' portion of the matching request */
        req->in.buffer = buffer;
-       talloc_steal(req->mem_ctx, buffer);
+       talloc_steal(req, buffer);
        req->in.size = len;
        req->in.allocated = req->in.size;
 
index 20a389af4c20b3fc2dd3fc15ffa46f2a64f27dc7..87bbe5a31b2ec692a492efb12f91a4f8b01c2368 100644 (file)
@@ -49,7 +49,7 @@ NTSTATUS smbcli_request_destroy(struct smbcli_request *req)
        /* ahh, its so nice to destroy a complex structure in such a
           simple way! */
        status = req->status;
-       talloc_destroy(req->mem_ctx);
+       talloc_free(req);
        return status;
 }
 
@@ -61,18 +61,8 @@ NTSTATUS smbcli_request_destroy(struct smbcli_request *req)
 struct smbcli_request *smbcli_request_setup_nonsmb(struct smbcli_transport *transport, uint_t size)
 {
        struct smbcli_request *req;
-       TALLOC_CTX *mem_ctx;
-       
-       /* each request gets its own talloc context. The request
-          structure itself is also allocated inside this context,
-          so we need to allocate it before we construct the request
-       */
-       mem_ctx = talloc_init("smbcli_request");
-       if (!mem_ctx) {
-               return NULL;
-       }
 
-       req = talloc(mem_ctx, sizeof(struct smbcli_request));
+       req = talloc_named(NULL, sizeof(struct smbcli_request), "smcli_request");
        if (!req) {
                return NULL;
        }
@@ -80,7 +70,6 @@ struct smbcli_request *smbcli_request_setup_nonsmb(struct smbcli_transport *tran
 
        /* setup the request context */
        req->state = SMBCLI_REQUEST_INIT;
-       req->mem_ctx = mem_ctx;
        req->transport = transport;
        req->session = NULL;
        req->tree = NULL;
@@ -89,7 +78,7 @@ struct smbcli_request *smbcli_request_setup_nonsmb(struct smbcli_transport *tran
        /* over allocate by a small amount */
        req->out.allocated = req->out.size + REQ_OVER_ALLOCATION; 
 
-       req->out.buffer = talloc(req->mem_ctx, req->out.allocated);
+       req->out.buffer = talloc(req, req->out.allocated);
        if (!req->out.buffer) {
                return NULL;
        }