diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-06-22 10:53:24 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-06-22 10:53:24 +0200 |
commit | 9123e24e7b68ad36d4ac2b8f325ea249a5ea9ff5 (patch) | |
tree | 2af4db555c749d23e826b617d3f4fece63cd5c7a /server/reds.c | |
parent | ae1de849acd1e58772dc3f318324ed936ff5f21c (diff) | |
download | spice-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/reds.c')
-rw-r--r-- | server/reds.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/server/reds.c b/server/reds.c index f9d91dbc..8c16896e 100644 --- a/server/reds.c +++ b/server/reds.c @@ -797,16 +797,18 @@ static int handle_incoming(RedsStreamContext *peer, IncomingHandler *handler) uint8_t *data = (uint8_t *)(header+1); size_t parsed_size; uint8_t *parsed; + message_destructor_t parsed_free; + buf += sizeof(SpiceDataHeader) + header->size; parsed = handler->parser(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); return -1; } handler->handle_message(handler->opaque, parsed_size, header->type, parsed); - free(parsed); + parsed_free(parsed); if (handler->shut) { return -1; } |