[Spice-devel] [PATCH 16/18] Remove use of global 'reds' from sound.c
Fabiano Fidêncio
ffidenci at redhat.com
Mon Feb 15 23:14:45 UTC 2016
On Mon, 2016-02-15 at 16:01 +0000, Frediano Ziglio wrote:
> From: Jonathon Jongsma <jjongsma at redhat.com>
>
> Pass RedsState variable to snd_attach_(playback|record) and get a
> reference to this variable when needed by various functions.
> ---
> server/reds.c | 4 ++--
> server/sound.c | 20 ++++++++++++++++++--
> server/sound.h | 4 ++--
> 3 files changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/server/reds.c b/server/reds.c
> index dd6ffd9..711744b 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -3243,7 +3243,7 @@ SPICE_GNUC_VISIBLE int
> spice_server_add_interface(SpiceServer *s,
> spice_warning("unsupported playback interface");
> return -1;
> }
> - snd_attach_playback(SPICE_CONTAINEROF(sin,
> SpicePlaybackInstance, base));
> + snd_attach_playback(reds, SPICE_CONTAINEROF(sin,
> SpicePlaybackInstance, base));
>
> } else if (strcmp(interface->type, SPICE_INTERFACE_RECORD) == 0)
> {
> spice_info("SPICE_INTERFACE_RECORD");
> @@ -3252,7 +3252,7 @@ SPICE_GNUC_VISIBLE int
> spice_server_add_interface(SpiceServer *s,
> spice_warning("unsupported record interface");
> return -1;
> }
> - snd_attach_record(SPICE_CONTAINEROF(sin,
> SpiceRecordInstance, base));
> + snd_attach_record(reds, SPICE_CONTAINEROF(sin,
> SpiceRecordInstance, base));
>
> } else if (strcmp(interface->type, SPICE_INTERFACE_CHAR_DEVICE)
> == 0) {
> if (interface->major_version !=
> SPICE_INTERFACE_CHAR_DEVICE_MAJOR ||
> diff --git a/server/sound.c b/server/sound.c
> index fd0b416..4e61986 100644
> --- a/server/sound.c
> +++ b/server/sound.c
> @@ -199,14 +199,22 @@ static SndChannel *snd_channel_put(SndChannel
> *channel)
> return channel;
> }
>
> +static RedsState* snd_channel_get_server(SndChannel *channel)
> +{
> + g_return_val_if_fail(channel != NULL, NULL);
> + return red_channel_get_server(channel->worker->base_channel);
> +}
> +
> static void snd_disconnect_channel(SndChannel *channel)
> {
> SndWorker *worker;
> + RedsState *reds;
>
> if (!channel || !channel->stream) {
> spice_debug("not connected");
> return;
> }
> + reds = snd_channel_get_server(channel);
> spice_debug("SndChannel=%p rcc=%p type=%d",
> channel, channel->channel_client, channel-
> >channel_client->channel->type);
> worker = channel->worker;
> @@ -247,6 +255,7 @@ static void snd_record_on_message_done(SndChannel
> *channel)
>
> static int snd_send_data(SndChannel *channel)
> {
> + RedsState *reds = snd_channel_get_server(channel);
> uint32_t n;
>
> if (!channel) {
> @@ -900,6 +909,7 @@ static SndChannel *__new_channel(SndWorker
> *worker, int size, uint32_t channel_i
> #endif
> int tos;
> MainChannelClient *mcc = red_client_get_main(client);
> + RedsState *reds = red_channel_get_server(worker->base_channel);
>
> spice_assert(stream);
> if ((flags = fcntl(stream->socket, F_GETFL)) == -1) {
> @@ -1037,6 +1047,7 @@ SPICE_GNUC_VISIBLE void
> spice_server_playback_start(SpicePlaybackInstance *sin)
> {
> SndChannel *channel = sin->st->worker.connection;
> PlaybackChannel *playback_channel = SPICE_CONTAINEROF(channel,
> PlaybackChannel, base);
> + RedsState *reds = snd_channel_get_server(channel);
>
> sin->st->worker.active = 1;
> if (!channel)
> @@ -1056,6 +1067,7 @@ SPICE_GNUC_VISIBLE void
> spice_server_playback_stop(SpicePlaybackInstance *sin)
> {
> SndChannel *channel = sin->st->worker.connection;
> PlaybackChannel *playback_channel = SPICE_CONTAINEROF(channel,
> PlaybackChannel, base);
> + RedsState *reds = snd_channel_get_server(channel);
>
> sin->st->worker.active = 0;
> if (!channel)
> @@ -1161,6 +1173,7 @@ static int snd_desired_audio_mode(int
> frequency, int client_can_celt, int client
>
> static void on_new_playback_channel(SndWorker *worker)
> {
> + RedsState *reds = red_channel_get_server(worker->base_channel);
> PlaybackChannel *playback_channel =
> SPICE_CONTAINEROF(worker->connection, PlaybackChannel,
> base);
> SpicePlaybackState *st = SPICE_CONTAINEROF(worker,
> SpicePlaybackState, worker);
> @@ -1181,6 +1194,7 @@ static void on_new_playback_channel(SndWorker
> *worker)
>
> static void snd_playback_cleanup(SndChannel *channel)
> {
> + RedsState *reds = snd_channel_get_server(channel);
> PlaybackChannel *playback_channel = SPICE_CONTAINEROF(channel,
> PlaybackChannel, base);
>
> if (playback_channel->base.active) {
> @@ -1507,7 +1521,7 @@ static void remove_worker(SndWorker *worker)
> spice_printerr("not found");
> }
>
> -void snd_attach_playback(SpicePlaybackInstance *sin)
> +void snd_attach_playback(RedsState *reds, SpicePlaybackInstance
> *sin)
> {
> SndWorker *playback_worker;
> RedChannel *channel;
> @@ -1537,7 +1551,7 @@ void snd_attach_playback(SpicePlaybackInstance
> *sin)
> reds_register_channel(reds, channel);
> }
>
> -void snd_attach_record(SpiceRecordInstance *sin)
> +void snd_attach_record(RedsState *reds, SpiceRecordInstance *sin)
> {
> SndWorker *record_worker;
> RedChannel *channel;
> @@ -1570,6 +1584,8 @@ static void snd_detach_common(SndWorker
> *worker)
> if (!worker) {
> return;
> }
> + RedsState *reds = red_channel_get_server(worker->base_channel);
> +
> remove_worker(worker);
> snd_disconnect_channel(worker->connection);
> reds_unregister_channel(reds, worker->base_channel);
> diff --git a/server/sound.h b/server/sound.h
> index 97f8410..25e59f0 100644
> --- a/server/sound.h
> +++ b/server/sound.h
> @@ -20,10 +20,10 @@
>
> #include "spice.h"
>
> -void snd_attach_playback(SpicePlaybackInstance *sin);
> +void snd_attach_playback(RedsState *reds, SpicePlaybackInstance
> *sin);
> void snd_detach_playback(SpicePlaybackInstance *sin);
>
> -void snd_attach_record(SpiceRecordInstance *sin);
> +void snd_attach_record(RedsState *reds, SpiceRecordInstance *sin);
> void snd_detach_record(SpiceRecordInstance *sin);
>
> void snd_set_playback_compression(int on);
Acked-by: Fabiano Fidêncio <fidencio at redhat.com>
More information about the Spice-devel
mailing list