diff --git a/src/cep_write_buffered.c b/src/cep_write_buffered.c index f35bb93..57377b9 100644 --- a/src/cep_write_buffered.c +++ b/src/cep_write_buffered.c @@ -29,7 +29,7 @@ int TR_cepWriteBuffered(TR_CommEndPoint this, size_t * size) { TR_RemoteData data; - int send; + int send = -4; *size = 0; diff --git a/src/datagram_service.c b/src/datagram_service.c index 54de58e..55852ce 100644 --- a/src/datagram_service.c +++ b/src/datagram_service.c @@ -55,10 +55,11 @@ datagramServiceNextMessage(void * _this, TR_RemoteData * data) { TR_CommEndPoint comm = _this; TR_ProtoMessage ret_message = NULL; + TR_RemoteData new_data = NULL; if (*data) { ret_message = TR_protoCreateMessage(comm->protocol, (*data)->remote); - TR_protoParse(comm->protocol, ret_message, *data); + new_data = TR_protoParse(comm->protocol, ret_message, *data); /* * In UDP I don't care about remaining data. UDP is an all or nothing @@ -71,8 +72,11 @@ datagramServiceNextMessage(void * _this, TR_RemoteData * data) */ if (! ret_message->ready) { - TR_delete(*data); TR_delete(ret_message); + if (new_data) { + TR_delete(new_data); + TR_delete(*data); + } } *data = NULL; @@ -88,6 +92,10 @@ datagramServiceCompose(void * _this, TR_ProtoMessage message) TR_RemoteData data = TR_protoCompose(((TR_CommEndPoint)_this)->protocol, message); + if (data->remote->handle == -1) { + data->free_remote = 1; + } + if (! data) { return FALSE; } diff --git a/src/simple_client.c b/src/simple_client.c index b0c9105..cd392f2 100644 --- a/src/simple_client.c +++ b/src/simple_client.c @@ -126,6 +126,12 @@ static TR_EventDone simpleClientHandleData(void * _this, TR_Event event) { + TR_ProtoMessage data = event->data; + + if (data->remote->handle == -1) { + TR_delete(data->remote); + } + ((TR_SimpleClient)_this)->response = event->data; return TR_EVENT_DONE;