tcptls.c: Don't close TCP client file descriptors more than once

ASTERISK-28430 #close

Change-Id: Ib556b0a0c95cca939e956886214ec8d828d89606
This commit is contained in:
Sean Bright 2020-09-30 16:00:36 -04:00 committed by Joshua Colp
parent 7ced144867
commit a6faa53af0
1 changed files with 3 additions and 9 deletions

View 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,