Attempt to clean up requests for tunnel connections that are going away.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4018 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
2022-11-07 02:57:29 +00:00
parent b12f8f9da8
commit 3a5ae4c228
4 changed files with 17 additions and 10 deletions

View File

@ -73,6 +73,7 @@ typedef struct _tf_ssb_request_t
tf_ssb_rpc_callback_t* callback;
tf_ssb_callback_cleanup_t* cleanup;
void* user_data;
tf_ssb_connection_t* dependent_connection;
} tf_ssb_request_t;
typedef struct _tf_ssb_broadcast_t
@ -466,7 +467,7 @@ static bool _tf_ssb_connection_get_request_callback(tf_ssb_connection_t* connect
return false;
}
void tf_ssb_connection_add_request(tf_ssb_connection_t* connection, int32_t request_number, tf_ssb_rpc_callback_t* callback, tf_ssb_callback_cleanup_t* cleanup, void* user_data)
void tf_ssb_connection_add_request(tf_ssb_connection_t* connection, int32_t request_number, tf_ssb_rpc_callback_t* callback, tf_ssb_callback_cleanup_t* cleanup, void* user_data, tf_ssb_connection_t* dependent_connection)
{
_tf_ssb_connection_remove_request(connection, request_number);
tf_ssb_request_t request =
@ -475,6 +476,7 @@ void tf_ssb_connection_add_request(tf_ssb_connection_t* connection, int32_t requ
.callback = callback,
.cleanup = cleanup,
.user_data = user_data,
.dependent_connection = dependent_connection,
};
int index = tf_util_insert_index(&request_number, connection->requests, connection->requests_count, sizeof(tf_ssb_request_t), _request_compare);
connection->requests = tf_resize_vec(connection->requests, sizeof(tf_ssb_request_t) * (connection->requests_count + 1));
@ -513,7 +515,7 @@ void tf_ssb_connection_rpc_send(tf_ssb_connection_t* connection, uint8_t flags,
}
if (request_number > 0 && callback)
{
tf_ssb_connection_add_request(connection, request_number, callback, cleanup, user_data);
tf_ssb_connection_add_request(connection, request_number, callback, cleanup, user_data, NULL);
}
uint8_t* combined = tf_malloc(9 + size);
*combined = flags;
@ -1398,6 +1400,13 @@ void _tf_ssb_connection_destroy(tf_ssb_connection_t* connection, const char* rea
}
for (tf_ssb_connection_t** it = &connection->ssb->connections; *it; it = &(*it)->next)
{
for (int i = 0; i < (*it)->requests_count; i++)
{
if ((*it)->requests[i].dependent_connection == connection)
{
_tf_ssb_connection_remove_request(*it, (*it)->requests[i].request_number);
}
}
if (*it == connection)
{
*it = connection->next;
@ -2118,6 +2127,7 @@ tf_ssb_connection_t* tf_ssb_connection_tunnel_create(tf_ssb_connection_t* connec
request_number,
_tf_ssb_connection_tunnel_callback,
NULL,
tunnel,
tunnel);
if (request_number < 0)
{