summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2011-02-22 03:52:38 +0100
committerMarc-André Lureau <marcandre.lureau@redhat.com>2011-02-28 16:36:35 +0100
commit4f983b2c9c642ac96abf214cefc1c51fad90791e (patch)
tree8d7ccd5f572bc0a22d1fa5fda3cc50664e6dd4b3
parent09c01c9516045cfad1a95108f0386e50fcd9dfa0 (diff)
downloadspice-4f983b2c9c642ac96abf214cefc1c51fad90791e.tar.gz
spice-4f983b2c9c642ac96abf214cefc1c51fad90791e.tar.xz
spice-4f983b2c9c642ac96abf214cefc1c51fad90791e.zip
server: add reds_channel_dispose()
Try to have a common base dispose() method for channels. For now, it just free the caps. Make use of it in snd_worker, and in sync_write() - sync_write() is going to have default caps later on. https://bugs.freedesktop.org/show_bug.cgi?id=34795
-rw-r--r--server/reds.c11
-rw-r--r--server/reds.h2
-rw-r--r--server/snd_worker.c3
3 files changed, 14 insertions, 2 deletions
diff --git a/server/reds.c b/server/reds.c
index 80f159ed..c6c8a66a 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -1338,6 +1338,17 @@ static int sync_write(RedsStream *stream, const void *in_buf, size_t n)
return TRUE;
}
+void reds_channel_dispose(Channel *channel)
+{
+ free(channel->caps);
+ channel->caps = NULL;
+ channel->num_caps = 0;
+
+ free(channel->common_caps);
+ channel->common_caps = NULL;
+ channel->num_common_caps = 0;
+}
+
static int reds_send_link_ack(RedLinkInfo *link)
{
SpiceLinkHeader header;
diff --git a/server/reds.h b/server/reds.h
index 3c810e0d..f0276b12 100644
--- a/server/reds.h
+++ b/server/reds.h
@@ -72,6 +72,8 @@ struct SpiceNetWireState {
struct TunnelWorker *worker;
};
+void reds_channel_dispose(Channel *channel);
+
ssize_t reds_stream_read(RedsStream *s, void *buf, size_t nbyte);
ssize_t reds_stream_write(RedsStream *s, const void *buf, size_t nbyte);
ssize_t reds_stream_writev(RedsStream *s, const struct iovec *iov, int iovcnt);
diff --git a/server/snd_worker.c b/server/snd_worker.c
index f18f7c90..1a4840c7 100644
--- a/server/snd_worker.c
+++ b/server/snd_worker.c
@@ -1236,8 +1236,7 @@ static void snd_detach_common(SndWorker *worker)
snd_disconnect_channel(worker->connection);
reds_unregister_channel(&worker->base);
- free(worker->base.common_caps);
- free(worker->base.caps);
+ reds_channel_dispose(&worker->base);
}
void snd_detach_playback(SpicePlaybackInstance *sin)