forked from cory/tildefriends
android: Fix some crashes, callstacks, and warnings I'm seeing in the logs.
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user