summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2015-01-30 14:35:12 -0600
committerFabiano FidĂȘncio <fidencio@redhat.com>2015-02-23 23:00:46 +0100
commit91402d813237ca9d79b4612e0fcd49b98a068d4a (patch)
tree03ae8b6cc3744bb4971903386bf8515f632f8823
parent5e663018df7b1c6494f1d6c270527d36618c6451 (diff)
downloadspice-91402d813237ca9d79b4612e0fcd49b98a068d4a.tar.gz
spice-91402d813237ca9d79b4612e0fcd49b98a068d4a.tar.xz
spice-91402d813237ca9d79b4612e0fcd49b98a068d4a.zip
Store a reference to RedsState in RedsMigTargetClient
This allows RedsMigTargetClient methods to use local variables rather than the global 'reds' variable
-rw-r--r--server/reds-private.h1
-rw-r--r--server/reds.c12
2 files changed, 7 insertions, 6 deletions
diff --git a/server/reds-private.h b/server/reds-private.h
index a2841d23..0fa03ae2 100644
--- a/server/reds-private.h
+++ b/server/reds-private.h
@@ -99,6 +99,7 @@ typedef struct RedsMigPendingLink {
} RedsMigPendingLink;
typedef struct RedsMigTargetClient {
+ RedsState *reds;
RingItem link;
RedClient *client;
Ring pending_links;
diff --git a/server/reds.c b/server/reds.c
index 7bf4e3b4..922b8d78 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -111,7 +111,7 @@ struct ChannelSecurityOptions {
static void migrate_timeout(void *opaque);
static RedsMigTargetClient* reds_mig_target_client_find(RedsState *reds, RedClient *client);
-static void reds_mig_target_client_free(RedsState *reds, RedsMigTargetClient *mig_client);
+static void reds_mig_target_client_free(RedsMigTargetClient *mig_client);
static void reds_mig_cleanup_wait_disconnect(RedsState *reds);
static void reds_mig_remove_wait_disconnect_client(RedsState *reds, RedClient *client);
static void reds_char_device_add_state(RedsState *reds, SpiceCharDeviceState *st);
@@ -414,7 +414,7 @@ void reds_client_disconnect(RedsState *reds, RedClient *client)
mig_client = reds_mig_target_client_find(reds, client);
if (mig_client) {
- reds_mig_target_client_free(reds, mig_client);
+ reds_mig_target_client_free(mig_client);
}
if (reds->mig_wait_disconnect) {
@@ -1451,6 +1451,7 @@ static void reds_mig_target_client_add(RedsState *reds, RedClient *client)
spice_info(NULL);
mig_client = spice_malloc0(sizeof(RedsMigTargetClient));
mig_client->client = client;
+ mig_client->reds = reds;
ring_init(&mig_client->pending_links);
ring_add(&reds->mig_target_clients, &mig_client->link);
reds->num_mig_target_clients++;
@@ -1478,7 +1479,6 @@ static void reds_mig_target_client_add_pending_link(RedsMigTargetClient *client,
{
RedsMigPendingLink *mig_link;
- spice_assert(reds);
spice_assert(client);
mig_link = spice_malloc0(sizeof(RedsMigPendingLink));
mig_link->link_msg = link_msg;
@@ -1487,12 +1487,12 @@ static void reds_mig_target_client_add_pending_link(RedsMigTargetClient *client,
ring_add(&client->pending_links, &mig_link->ring_link);
}
-static void reds_mig_target_client_free(RedsState *reds, RedsMigTargetClient *mig_client)
+static void reds_mig_target_client_free(RedsMigTargetClient *mig_client)
{
RingItem *now, *next;
ring_remove(&mig_client->link);
- reds->num_mig_target_clients--;
+ mig_client->reds->num_mig_target_clients--;
RING_FOREACH_SAFE(now, next, &mig_client->pending_links) {
RedsMigPendingLink *mig_link = SPICE_CONTAINEROF(now, RedsMigPendingLink, ring_link);
@@ -1709,7 +1709,7 @@ static int reds_link_mig_target_channels(RedsState *reds, RedClient *client)
reds_channel_do_link(channel, client, mig_link->link_msg, mig_link->stream);
}
- reds_mig_target_client_free(reds, mig_client);
+ reds_mig_target_client_free(mig_client);
return TRUE;
}