]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
tcptls.c: Don't close TCP client file descriptors more than once
authorSean Bright <sean.bright@gmail.com>
Wed, 30 Sep 2020 20:00:36 +0000 (16:00 -0400)
committerJoshua Colp <jcolp@sangoma.com>
Thu, 8 Oct 2020 10:46:31 +0000 (05:46 -0500)
ASTERISK-28430 #close

Change-Id: Ib556b0a0c95cca939e956886214ec8d828d89606

main/tcptls.c

index 6a26cb865ca2e329266362a39415cd30fcea64f6..45eb29bf6c442104d36e9847413912723f7918af 100644 (file)
@@ -608,13 +608,8 @@ struct ast_tcptls_session_instance *ast_tcptls_client_start(struct ast_tcptls_se
        return handle_tcptls_connection(tcptls_session);
 
 client_start_error:
-       if (desc) {
-               close(desc->accept_fd);
-               desc->accept_fd = -1;
-       }
        ao2_ref(tcptls_session, -1);
        return NULL;
-
 }
 
 struct ast_tcptls_session_instance *ast_tcptls_client_create(struct ast_tcptls_session_args *desc)
@@ -631,10 +626,6 @@ struct ast_tcptls_session_instance *ast_tcptls_client_create(struct ast_tcptls_s
        /* If we return early, there is no connection */
        ast_sockaddr_setnull(&desc->old_address);
 
-       if (desc->accept_fd != -1) {
-               close(desc->accept_fd);
-       }
-
        fd = desc->accept_fd = socket(ast_sockaddr_is_ipv6(&desc->remote_address) ?
                                      AF_INET6 : AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (desc->accept_fd < 0) {
@@ -672,6 +663,9 @@ struct ast_tcptls_session_instance *ast_tcptls_client_create(struct ast_tcptls_s
                goto error;
        }
 
+       /* From here on out, the iostream owns the accept_fd and it will take
+        * care of closing it when the iostream is closed */
+
        tcptls_session->parent = desc;
        tcptls_session->parent->worker_fn = NULL;
        ast_sockaddr_copy(&tcptls_session->remote_address,