summaryrefslogtreecommitdiffstats
path: root/server/snd_worker.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2010-06-22 10:53:24 +0200
committerAlexander Larsson <alexl@redhat.com>2010-06-22 10:53:24 +0200
commit9123e24e7b68ad36d4ac2b8f325ea249a5ea9ff5 (patch)
tree2af4db555c749d23e826b617d3f4fece63cd5c7a /server/snd_worker.c
parentae1de849acd1e58772dc3f318324ed936ff5f21c (diff)
downloadspice-9123e24e7b68ad36d4ac2b8f325ea249a5ea9ff5.tar.gz
spice-9123e24e7b68ad36d4ac2b8f325ea249a5ea9ff5.tar.xz
spice-9123e24e7b68ad36d4ac2b8f325ea249a5ea9ff5.zip
Add destructor for demarshalled messages
This is required because we don't want to free messages that just refer to the unparsed message (like SpiceMsgData). Also, in the future we might need it for more complex demarshalling.
Diffstat (limited to 'server/snd_worker.c')
-rw-r--r--server/snd_worker.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/server/snd_worker.c b/server/snd_worker.c
index d55380c8..6c0f9d68 100644
--- a/server/snd_worker.c
+++ b/server/snd_worker.c
@@ -415,13 +415,14 @@ static void snd_receive(void* data)
uint8_t *data = (uint8_t *)(header+1);
size_t parsed_size;
uint8_t *parsed;
+ message_destructor_t parsed_free;
n = channel->recive_data.now - (uint8_t *)header;
if (n < sizeof(SpiceDataHeader) || n < sizeof(SpiceDataHeader) + header->size) {
break;
}
parsed = channel->parser((void *)data, data + header->size, header->type,
- SPICE_VERSION_MINOR, &parsed_size);
+ SPICE_VERSION_MINOR, &parsed_size, &parsed_free);
if (parsed == NULL) {
red_printf("failed to parse message type %d", header->type);
snd_disconnect_channel(channel);
@@ -432,7 +433,7 @@ static void snd_receive(void* data)
snd_disconnect_channel(channel);
return;
}
- free(parsed);
+ parsed_free(parsed);
channel->recive_data.message = (SpiceDataHeader *)((uint8_t *)header +
sizeof(SpiceDataHeader) +
header->size);