[Spice-devel] [PATCH v2 4/6] sound: use GList for global list of sound channels
Pavel Grunt
pgrunt at redhat.com
Tue Apr 25 07:41:30 UTC 2017
Ack,
Pavel
On Mon, 2017-04-24 at 12:09 -0500, Jonathon Jongsma wrote:
> Instead of putting a 'next' link within the channel structure
> itself,
> just use a generic GList structure to keep a list of active sound
> channels.
> ---
> server/sound.c | 26 +++++++++-----------------
> 1 file changed, 9 insertions(+), 17 deletions(-)
>
> diff --git a/server/sound.c b/server/sound.c
> index b5abf47..44b7582 100644
> --- a/server/sound.c
> +++ b/server/sound.c
> @@ -167,7 +167,6 @@ struct SndChannel {
> RedChannel parent;
>
> SndChannelClient *connection; /* Only one client is supported
> */
> - SndChannel *next; /* For the global SndChannel list */
>
> gboolean active;
> SpiceVolumeState volume;
> @@ -237,7 +236,7 @@ G_DEFINE_TYPE(RecordChannelClient,
> record_channel_client, TYPE_SND_CHANNEL_CLIEN
>
>
> /* A list of all Spice{Playback,Record}State objects */
> -static SndChannel *snd_channels;
> +static GList *snd_channels;
>
> static void snd_playback_start(SndChannel *channel);
> static void snd_record_start(SndChannel *channel);
> @@ -970,9 +969,10 @@ SPICE_GNUC_VISIBLE void
> spice_server_playback_put_samples(SpicePlaybackInstance
>
> void snd_set_playback_latency(RedClient *client, uint32_t latency)
> {
> - SndChannel *now = snd_channels;
> + GList *l;
>
> - for (; now; now = now->next) {
> + for (l = snd_channels; l != NULL; l = l->next) {
> + SndChannel *now = l->data;
> uint32_t type;
> g_object_get(RED_CHANNEL(now), "channel-type", &type,
> NULL);
> if (type == SPICE_CHANNEL_PLAYBACK && now->connection &&
> @@ -1282,21 +1282,12 @@ static void snd_set_record_peer(RedChannel
> *red_channel, RedClient *client, Reds
>
> static void add_channel(SndChannel *channel)
> {
> - channel->next = snd_channels;
> - snd_channels = channel;
> + snd_channels = g_list_prepend(snd_channels, channel);
> }
>
> static void remove_channel(SndChannel *channel)
> {
> - SndChannel **now = &snd_channels;
> - while (*now) {
> - if (*now == channel) {
> - *now = channel->next;
> - return;
> - }
> - now = &(*now)->next;
> - }
> - spice_printerr("not found");
> + snd_channels = g_list_remove(snd_channels, channel);
> }
>
> static void
> @@ -1452,9 +1443,10 @@ void snd_detach_record(SpiceRecordInstance
> *sin)
>
> void snd_set_playback_compression(bool on)
> {
> - SndChannel *now = snd_channels;
> + GList *l;
>
> - for (; now; now = now->next) {
> + for (l = snd_channels; l != NULL; l = l->next) {
> + SndChannel *now = l->data;
> uint32_t type;
> g_object_get(RED_CHANNEL(now), "channel-type", &type,
> NULL);
> if (type == SPICE_CHANNEL_PLAYBACK && now->connection) {
More information about the Spice-devel
mailing list