]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:libsmb: let nb_packet_server_destructor() explicitly destroy the tevent_fd
authorStefan Metzmacher <metze@samba.org>
Thu, 21 May 2015 00:20:00 +0000 (02:20 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 12 Jun 2015 15:08:17 +0000 (17:08 +0200)
The need to destroy the tevent_fd before closing the socket fd.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11316

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/libsmb/unexpected.c

index ee1c3601caea023a03175c65509f7714e00d8cb3..40c09c38d750d886ba61a91fb0ffc84cbea9acd4 100644 (file)
@@ -41,6 +41,7 @@ struct nb_packet_client;
 struct nb_packet_server {
        struct tevent_context *ev;
        int listen_sock;
+       struct tevent_fd *listen_fde;
        int max_clients;
        int num_clients;
        struct nb_packet_client *clients;
@@ -71,7 +72,6 @@ NTSTATUS nb_packet_server_create(TALLOC_CTX *mem_ctx,
                                 struct nb_packet_server **presult)
 {
        struct nb_packet_server *result;
-       struct tevent_fd *fde;
        NTSTATUS status;
        int rc;
 
@@ -96,9 +96,12 @@ NTSTATUS nb_packet_server_create(TALLOC_CTX *mem_ctx,
        }
        talloc_set_destructor(result, nb_packet_server_destructor);
 
-       fde = tevent_add_fd(ev, result, result->listen_sock, TEVENT_FD_READ,
-                           nb_packet_server_listener, result);
-       if (fde == NULL) {
+       result->listen_fde = tevent_add_fd(ev, result,
+                                          result->listen_sock,
+                                          TEVENT_FD_READ,
+                                          nb_packet_server_listener,
+                                          result);
+       if (result->listen_fde == NULL) {
                status = NT_STATUS_NO_MEMORY;
                goto fail;
        }
@@ -112,6 +115,8 @@ fail:
 
 static int nb_packet_server_destructor(struct nb_packet_server *s)
 {
+       TALLOC_FREE(s->listen_fde);
+
        if (s->listen_sock != -1) {
                close(s->listen_sock);
                s->listen_sock = -1;