android: Fix some crashes, callstacks, and warnings I'm seeing in the logs.

This commit is contained in:
2024-12-04 20:05:50 -05:00
parent e0d7e90894
commit 0e97bbe37c
4 changed files with 89 additions and 30 deletions

View File

@ -12,6 +12,8 @@ typedef struct _tf_packetstream_t
{
tf_packetstream_onreceive_t* onreceive;
void* onreceive_user_data;
tf_packetstream_on_close_t* on_close;
void* on_close_user_data;
uv_pipe_t stream;
char* buffer;
size_t buffer_size;
@ -30,6 +32,8 @@ void tf_packetstream_destroy(tf_packetstream_t* stream)
{
stream->onreceive = NULL;
stream->onreceive_user_data = NULL;
stream->on_close = NULL;
stream->on_close_user_data = NULL;
stream->destroyed = true;
if (stream->buffer)
{
@ -110,6 +114,14 @@ static void _packetstream_on_read(uv_stream_t* handle, ssize_t count, const uv_b
}
else
{
tf_packetstream_on_close_t* on_close = stream->on_close;
void* user_data = stream->on_close_user_data;
stream->on_close = NULL;
stream->on_close_user_data = NULL;
if (on_close)
{
on_close(user_data);
}
tf_packetstream_close(stream);
}
tf_free(buffer->base);
@ -150,7 +162,7 @@ void tf_packetstream_send(tf_packetstream_t* stream, int packet_type, const char
int result = uv_write(request, (uv_stream_t*)&stream->stream, &write_buffer, 1, _packetstream_on_write);
if (result)
{
tf_printf("uv_write: %s\n", uv_strerror(result));
tf_printf("tf_packetstream_send: uv_write: %s\n", uv_strerror(result));
tf_free(request);
}
}
@ -162,6 +174,12 @@ void tf_packetstream_set_on_receive(tf_packetstream_t* stream, tf_packetstream_o
stream->onreceive_user_data = user_data;
}
void tf_packetstream_set_on_close(tf_packetstream_t* stream, tf_packetstream_on_close_t* callback, void* user_data)
{
stream->on_close = callback;
stream->on_close_user_data = user_data;
}
static void _tf_packetstream_handle_closed(uv_handle_t* handle)
{
tf_packetstream_t* packetstream = handle->data;