diff options
author | Alon Levy <alevy@redhat.com> | 2011-08-22 15:36:56 +0100 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2011-08-23 18:28:59 +0300 |
commit | 9255515c15e4c322c35395b31e056a807b389289 (patch) | |
tree | baec5606e52ef853c974d07af04f6cd96bc6008c /server | |
parent | 439993d7882bc5a9b1055553f30b8b18140b7f0d (diff) | |
download | spice-9255515c15e4c322c35395b31e056a807b389289.tar.gz spice-9255515c15e4c322c35395b31e056a807b389289.tar.xz spice-9255515c15e4c322c35395b31e056a807b389289.zip |
server/snd_worker.c: add red_channel_client_destroy_dummy
Diffstat (limited to 'server')
-rw-r--r-- | server/red_channel.c | 36 | ||||
-rw-r--r-- | server/red_channel.h | 1 | ||||
-rw-r--r-- | server/snd_worker.c | 1 |
3 files changed, 23 insertions, 15 deletions
diff --git a/server/red_channel.c b/server/red_channel.c index 3f47f7f7..87320b47 100644 --- a/server/red_channel.c +++ b/server/red_channel.c @@ -403,21 +403,6 @@ error: return NULL; } - -RedChannelClient *red_channel_client_create_dummy(int size, - RedChannel *channel, - RedClient *client) -{ - RedChannelClient *rcc; - - ASSERT(size >= sizeof(RedChannelClient)); - rcc = spice_malloc0(size); - rcc->client = client; - rcc->channel = channel; - red_channel_add_client(channel, rcc); - return rcc; -} - static void red_channel_client_default_connect(RedChannel *channel, RedClient *client, RedsStream *stream, int migration, @@ -951,6 +936,7 @@ static void red_channel_remove_client(RedChannelClient *rcc) { ASSERT(pthread_equal(pthread_self(), rcc->channel->thread_id)); ring_remove(&rcc->channel_link); + ASSERT(rcc->channel->clients_num > 0); rcc->channel->clients_num--; // TODO: should we set rcc->channel to NULL??? } @@ -990,6 +976,26 @@ void red_channel_disconnect(RedChannel *channel) } } +RedChannelClient *red_channel_client_create_dummy(int size, + RedChannel *channel, + RedClient *client) +{ + RedChannelClient *rcc; + + ASSERT(size >= sizeof(RedChannelClient)); + rcc = spice_malloc0(size); + rcc->client = client; + rcc->channel = channel; + red_channel_add_client(channel, rcc); + return rcc; +} + +void red_channel_client_destroy_dummy(RedChannelClient *rcc) +{ + red_channel_remove_client(rcc); + free(rcc); +} + void red_channel_apply_clients(RedChannel *channel, channel_client_callback cb) { RingItem *link; diff --git a/server/red_channel.h b/server/red_channel.h index daee8bae..a24ff7db 100644 --- a/server/red_channel.h +++ b/server/red_channel.h @@ -278,6 +278,7 @@ RedChannel *red_channel_create_dummy(int size, uint32_t type, uint32_t id); RedChannelClient *red_channel_client_create_dummy(int size, RedChannel *channel, RedClient *client); +void red_channel_client_destroy_dummy(RedChannelClient *rcc); int red_channel_is_connected(RedChannel *channel); diff --git a/server/snd_worker.c b/server/snd_worker.c index 4c9a6f01..08947859 100644 --- a/server/snd_worker.c +++ b/server/snd_worker.c @@ -216,6 +216,7 @@ static void snd_disconnect_channel(SndChannel *channel) } channel->cleanup(channel); worker = channel->worker; + red_channel_client_destroy_dummy(worker->connection->channel_client); worker->connection = NULL; core->watch_remove(channel->stream->watch); channel->stream->watch = NULL; |