On Mon, 2016-02-15 at 16:01 +0000, Frediano Ziglio wrote: > From: Jonathon Jongsma <jjongsma@xxxxxxxxxx> > > 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@xxxxxxxxxx> _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel