1
0
mirror of https://github.com/coturn/coturn.git synced 2025-10-23 12:00:59 +02:00

fix turn session leak (#962)

Actually, as below, before fixing, the sessions_map may be larger and
larger when register_callback_on_ioa_socket inside
open_client_connection_session retrun -1. The reason is that, if
register_callback_on_ioa_socket return -1, no read/write/ event will be
registered and no timeout event will be registered, in this case, the
session will never be deleted from sessions_map.

![image](https://user-images.githubusercontent.com/23566147/186558792-089ed9b2-9eb0-4ece-b7c0-99eaca10ea99.png)

After fixing, when register_callback_on_ioa_socket fail,it doesn't
return immediately, instead, we still register
client_to_be_allocated_timeout_handler in the next step of
open_client_connection_session. In this case, the unuseful session will
be deleted and freed after timeout.

@eakraly @ggarber
This commit is contained in:
Gustavo Garcia 2022-08-29 21:56:47 +02:00 committed by GitHub
commit c8663f4a91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4719,7 +4719,7 @@ static int attach_socket_to_session(turn_turnserver* server, ioa_socket_handle s
int open_client_connection_session(turn_turnserver* server,
struct socket_message *sm) {
int ret = 0;
FUNCSTART;
if (!server)
return -1;
@ -4733,7 +4733,7 @@ int open_client_connection_session(turn_turnserver* server,
if(register_callback_on_ioa_socket(server->e, ss->client_socket, IOA_EV_READ,
client_input_handler, ss, 0)<0) {
return -1;
ret = -1;
}
set_ioa_socket_session(ss->client_socket, ss);
@ -4756,7 +4756,7 @@ int open_client_connection_session(turn_turnserver* server,
FUNCEND;
return 0;
return ret;
}
/////////////// io handlers ///////////////////