From: Sean Bright Date: Wed, 30 Sep 2020 20:00:36 +0000 (-0400) Subject: tcptls.c: Don't close TCP client file descriptors more than once X-Git-Tag: 19.0.0-rc1~297 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fa023cbfa0e71ad8d2b6e2146c5d4ca1792b206f;p=thirdparty%2Fasterisk.git tcptls.c: Don't close TCP client file descriptors more than once ASTERISK-28430 #close Change-Id: Ib556b0a0c95cca939e956886214ec8d828d89606 --- diff --git a/main/tcptls.c b/main/tcptls.c index 6a26cb865c..45eb29bf6c 100644 --- a/main/tcptls.c +++ b/main/tcptls.c @@ -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,