Showing
3 changed files
with
17 additions
and
3 deletions
| @@ -55,10 +55,11 @@ datagramServiceNextMessage(void * _this, TR_RemoteData * data) | @@ -55,10 +55,11 @@ datagramServiceNextMessage(void * _this, TR_RemoteData * data) | ||
| 55 | { | 55 | { |
| 56 | TR_CommEndPoint comm = _this; | 56 | TR_CommEndPoint comm = _this; |
| 57 | TR_ProtoMessage ret_message = NULL; | 57 | TR_ProtoMessage ret_message = NULL; |
| 58 | + TR_RemoteData new_data = NULL; | ||
| 58 | 59 | ||
| 59 | if (*data) { | 60 | if (*data) { |
| 60 | ret_message = TR_protoCreateMessage(comm->protocol, (*data)->remote); | 61 | ret_message = TR_protoCreateMessage(comm->protocol, (*data)->remote); |
| 61 | - TR_protoParse(comm->protocol, ret_message, *data); | 62 | + new_data = TR_protoParse(comm->protocol, ret_message, *data); |
| 62 | 63 | ||
| 63 | /* | 64 | /* |
| 64 | * In UDP I don't care about remaining data. UDP is an all or nothing | 65 | * 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) | @@ -71,8 +72,11 @@ datagramServiceNextMessage(void * _this, TR_RemoteData * data) | ||
| 71 | */ | 72 | */ |
| 72 | 73 | ||
| 73 | if (! ret_message->ready) { | 74 | if (! ret_message->ready) { |
| 74 | - TR_delete(*data); | ||
| 75 | TR_delete(ret_message); | 75 | TR_delete(ret_message); |
| 76 | + if (new_data) { | ||
| 77 | + TR_delete(new_data); | ||
| 78 | + TR_delete(*data); | ||
| 79 | + } | ||
| 76 | } | 80 | } |
| 77 | 81 | ||
| 78 | *data = NULL; | 82 | *data = NULL; |
| @@ -88,6 +92,10 @@ datagramServiceCompose(void * _this, TR_ProtoMessage message) | @@ -88,6 +92,10 @@ datagramServiceCompose(void * _this, TR_ProtoMessage message) | ||
| 88 | TR_RemoteData data = | 92 | TR_RemoteData data = |
| 89 | TR_protoCompose(((TR_CommEndPoint)_this)->protocol, message); | 93 | TR_protoCompose(((TR_CommEndPoint)_this)->protocol, message); |
| 90 | 94 | ||
| 95 | + if (data->remote->handle == -1) { | ||
| 96 | + data->free_remote = 1; | ||
| 97 | + } | ||
| 98 | + | ||
| 91 | if (! data) { | 99 | if (! data) { |
| 92 | return FALSE; | 100 | return FALSE; |
| 93 | } | 101 | } |
| @@ -126,6 +126,12 @@ static | @@ -126,6 +126,12 @@ static | ||
| 126 | TR_EventDone | 126 | TR_EventDone |
| 127 | simpleClientHandleData(void * _this, TR_Event event) | 127 | simpleClientHandleData(void * _this, TR_Event event) |
| 128 | { | 128 | { |
| 129 | + TR_ProtoMessage data = event->data; | ||
| 130 | + | ||
| 131 | + if (data->remote->handle == -1) { | ||
| 132 | + TR_delete(data->remote); | ||
| 133 | + } | ||
| 134 | + | ||
| 129 | ((TR_SimpleClient)_this)->response = event->data; | 135 | ((TR_SimpleClient)_this)->response = event->data; |
| 130 | 136 | ||
| 131 | return TR_EVENT_DONE; | 137 | return TR_EVENT_DONE; |
Please
register
or
login
to post a comment