r22749: fix memory leak of nbt_name_request structure which are used to send replies
authorStefan Metzmacher <metze@samba.org>
Mon, 7 May 2007 15:27:50 +0000 (15:27 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:52:09 +0000 (14:52 -0500)
and never have an async callback that could free it.

we only had the memory leak in the error path the
standard path was ok.

metze
(This used to be commit d2a2fe662db5b773f4bd54498d6b31b773633903)

source4/libcli/nbt/nbtsocket.c

index c1e30fc2457c38f4424ae7a9d20b13c918b215bf..0931de63c81730a4f429f155272489bcb4c4a094 100644 (file)
@@ -45,6 +45,7 @@ static int nbt_name_request_destructor(struct nbt_name_request *req)
                req->name_trn_id = 0;
        }
        if (req->te) {
+               talloc_free(req->te);
                req->te = NULL;
        }
        if (req->nbtsock->send_queue == NULL) {
@@ -102,6 +103,8 @@ failed:
        talloc_free(tmp_ctx);
        if (req->async.fn) {
                req->async.fn(req);
+       } else if (req->is_reply) {
+               talloc_free(req);
        }
        return;
 }
@@ -140,6 +143,8 @@ static void nbt_name_socket_timeout(struct event_context *ev, struct timed_event
        }
        if (req->async.fn) {
                req->async.fn(req);
+       } else if (req->is_reply) {
+               talloc_free(req);
        }
 }
 
@@ -462,9 +467,7 @@ NTSTATUS nbt_name_request_recv(struct nbt_name_request *req)
                if (event_loop_once(req->nbtsock->event_ctx) != 0) {
                        req->state = NBT_REQUEST_ERROR;
                        req->status = NT_STATUS_UNEXPECTED_NETWORK_ERROR;
-                       if (req->async.fn) {
-                               req->async.fn(req);
-                       }
+                       break;
                }
        }
        return req->status;