[Spice-devel] [PATCH spice-gtk 01/15] audio: do not access session private struct
Jonathon Jongsma
jjongsma at redhat.com
Tue Nov 25 11:37:28 PST 2014
On Tue, 2014-11-25 at 14:19 +0100, Marc-André Lureau wrote:
> ---
> gtk/spice-audio.c | 50 ++++++++++--------------------------------------
> gtk/spice-session-priv.h | 1 +
> gtk/spice-session.c | 42 ++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 53 insertions(+), 40 deletions(-)
>
> diff --git a/gtk/spice-audio.c b/gtk/spice-audio.c
> index 638f667..7754736 100644
> --- a/gtk/spice-audio.c
> +++ b/gtk/spice-audio.c
> @@ -166,17 +166,18 @@ static void connect_channel(SpiceAudio *self, SpiceChannel *channel)
>
> static void update_audio_channels(SpiceAudio *self, SpiceSession *session)
> {
> - if (session->priv->audio) {
> - GList *list, *tmp;
> -
> - list = spice_session_get_channels(session);
> - for (tmp = g_list_first(list); tmp != NULL; tmp = g_list_next(tmp)) {
> - connect_channel(self, tmp->data);
> - }
> - g_list_free(list);
> - } else {
> + GList *list, *tmp;
> +
> + if (!spice_session_get_audio_enabled(session)) {
> g_debug("FIXME: disconnect audio channels");
> + return;
> + }
> +
> + list = spice_session_get_channels(session);
> + for (tmp = g_list_first(list); tmp != NULL; tmp = g_list_next(tmp)) {
> + connect_channel(self, tmp->data);
> }
> + g_list_free(list);
> }
>
> static void channel_new(SpiceSession *session, SpiceChannel *channel, SpiceAudio *self)
> @@ -229,34 +230,3 @@ SpiceAudio *spice_audio_new(SpiceSession *session, GMainContext *context,
>
> return self;
> }
> -
> -/**
> - * spice_audio_get:
> - * @session: the #SpiceSession to connect to
> - * @context: (allow-none): a #GMainContext to attach to (or %NULL for default).
> - *
> - * Gets the #SpiceAudio associated with the passed in #SpiceSession.
> - * A new #SpiceAudio instance will be created the first time this
> - * function is called for a certain #SpiceSession.
> - *
> - * Note that this function returns a weak reference, which should not be used
> - * after the #SpiceSession itself has been unref-ed by the caller.
> - *
> - * Returns: (transfer none): a weak reference to a #SpiceAudio
> - * instance or %NULL if failed.
> - **/
> -SpiceAudio *spice_audio_get(SpiceSession *session, GMainContext *context)
> -{
> - static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
> - SpiceAudio *self;
> -
> - g_static_mutex_lock(&mutex);
> - self = session->priv->audio_manager;
> - if (self == NULL) {
> - self = spice_audio_new(session, context, NULL);
> - session->priv->audio_manager = self;
> - }
> - g_static_mutex_unlock(&mutex);
> -
> - return self;
> -}
> diff --git a/gtk/spice-session-priv.h b/gtk/spice-session-priv.h
> index 8e102e0..55e2ed2 100644
> --- a/gtk/spice-session-priv.h
> +++ b/gtk/spice-session-priv.h
> @@ -172,6 +172,7 @@ guint32 spice_session_get_playback_latency(SpiceSession *session);
> void spice_session_sync_playback_latency(SpiceSession *session);
> const gchar* spice_session_get_shared_dir(SpiceSession *session);
> void spice_session_set_shared_dir(SpiceSession *session, const gchar *dir);
> +gboolean spice_session_get_audio_enabled(SpiceSession *session);
>
> G_END_DECLS
>
> diff --git a/gtk/spice-session.c b/gtk/spice-session.c
> index c44a3e1..948c238 100644
> --- a/gtk/spice-session.c
> +++ b/gtk/spice-session.c
> @@ -32,6 +32,7 @@
> #include "wocky-http-proxy.h"
> #include "spice-uri-priv.h"
> #include "channel-playback-priv.h"
> +#include "spice-audio.h"
>
> struct channel {
> SpiceChannel *channel;
> @@ -2279,3 +2280,44 @@ SpiceURI *spice_session_get_proxy_uri(SpiceSession *session)
>
> return s->proxy;
> }
> +
> +/**
> + * spice_audio_get:
> + * @session: the #SpiceSession to connect to
> + * @context: (allow-none): a #GMainContext to attach to (or %NULL for default).
> + *
> + * Gets the #SpiceAudio associated with the passed in #SpiceSession.
> + * A new #SpiceAudio instance will be created the first time this
> + * function is called for a certain #SpiceSession.
> + *
> + * Note that this function returns a weak reference, which should not be used
> + * after the #SpiceSession itself has been unref-ed by the caller.
> + *
> + * Returns: (transfer none): a weak reference to a #SpiceAudio
> + * instance or %NULL if failed.
> + **/
> +SpiceAudio *spice_audio_get(SpiceSession *session, GMainContext *context)
> +{
> + static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
> + SpiceAudio *self;
> +
> + g_return_val_if_fail(SPICE_IS_SESSION(session), NULL);
> +
> + g_static_mutex_lock(&mutex);
> + self = session->priv->audio_manager;
> + if (self == NULL) {
> + self = spice_audio_new(session, context, NULL);
> + session->priv->audio_manager = self;
> + }
> + g_static_mutex_unlock(&mutex);
> +
> + return self;
> +}
I would prefer that this move of spice_audio_get() to a different source
file happened in a separate commit. It's a self-contained change and
makes the other commit harder to understand since it makes me try to
figure out how these different parts are related. Otherwise ACK.
> +
> +G_GNUC_INTERNAL
> +gboolean spice_session_get_audio_enabled(SpiceSession *session)
> +{
> + g_return_val_if_fail(SPICE_IS_SESSION(session), FALSE);
> +
> + return session->priv->audio;
> +}
More information about the Spice-devel
mailing list