[Spice-devel] [PATCH spice-gtk 1/2] build: fix build with glib < 2.32
Hans de Goede
hdegoede at redhat.com
Sat Mar 17 00:34:02 PDT 2012
Ack series.
On 03/16/2012 05:13 PM, Marc-André Lureau wrote:
> Using GMutex as a static mutex is only possible since 2.32.
> ---
> gtk/spice-channel-priv.h | 8 +++++++-
> gtk/spice-channel.c | 20 ++++++++++----------
> gtk/spice-util-priv.h | 14 ++++++++++++++
> 3 files changed, 31 insertions(+), 11 deletions(-)
>
> diff --git a/gtk/spice-channel-priv.h b/gtk/spice-channel-priv.h
> index 88611d0..c61779d 100644
> --- a/gtk/spice-channel-priv.h
> +++ b/gtk/spice-channel-priv.h
> @@ -29,6 +29,7 @@
> #include<sasl/sasl.h>
> #endif
>
> +#include "spice-util-priv.h"
> #include "coroutine.h"
> #include "gio-coroutine.h"
>
> @@ -100,7 +101,7 @@ struct _SpiceChannelPrivate {
>
> GQueue xmit_queue;
> gboolean xmit_queue_blocked;
> - GMutex xmit_queue_lock;
> + STATIC_MUTEX xmit_queue_lock;
> guint xmit_queue_wakeup_id;
>
> char name[16];
> @@ -132,6 +133,11 @@ struct _SpiceChannelPrivate {
> uint64_t last_message_serial;
> };
>
> +#if GLIB_CHECK_VERSION(2,32,0)
> +#define g_mutex_lock(m) g_mutex_lock(&(m))
> +#else
> +#endif
> +
> SpiceMsgIn *spice_msg_in_new(SpiceChannel *channel);
> SpiceMsgIn *spice_msg_in_sub_new(SpiceChannel *channel, SpiceMsgIn *parent,
> SpiceSubMessage *sub);
> diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c
> index be95f00..0b7dff8 100644
> --- a/gtk/spice-channel.c
> +++ b/gtk/spice-channel.c
> @@ -110,7 +110,7 @@ static void spice_channel_init(SpiceChannel *channel)
> spice_channel_set_common_capability(channel, SPICE_COMMON_CAP_PROTOCOL_AUTH_SELECTION);
> spice_channel_set_common_capability(channel, SPICE_COMMON_CAP_MINI_HEADER);
> g_queue_init(&c->xmit_queue);
> - g_mutex_init(&c->xmit_queue_lock);
> + STATIC_MUTEX_INIT(c->xmit_queue_lock);
> }
>
> static void spice_channel_constructed(GObject *gobject)
> @@ -162,7 +162,7 @@ static void spice_channel_finalize(GObject *gobject)
>
> g_idle_remove_by_data(gobject);
>
> - g_mutex_clear(&c->xmit_queue_lock);
> + STATIC_MUTEX_CLEAR(c->xmit_queue_lock);
>
> if (c->caps)
> g_array_free(c->caps, TRUE);
> @@ -667,9 +667,9 @@ static gboolean spice_channel_idle_wakeup(gpointer user_data)
> * 5) xmit_queue_wakeup_id now says there is a wakeup pending which is
> * false
> */
> - g_mutex_lock(&c->xmit_queue_lock);
> + STATIC_MUTEX_LOCK(c->xmit_queue_lock);
> c->xmit_queue_wakeup_id = 0;
> - g_mutex_unlock(&c->xmit_queue_lock);
> + STATIC_MUTEX_UNLOCK(c->xmit_queue_lock);
>
> spice_channel_wakeup(channel, FALSE);
>
> @@ -685,7 +685,7 @@ void spice_msg_out_send(SpiceMsgOut *out)
> g_return_if_fail(out != NULL);
> g_return_if_fail(out->channel != NULL);
>
> - g_mutex_lock(&out->channel->priv->xmit_queue_lock);
> + STATIC_MUTEX_LOCK(out->channel->priv->xmit_queue_lock);
> if (out->channel->priv->xmit_queue_blocked) {
> g_warning("message queue is blocked, dropping message");
> goto end;
> @@ -705,7 +705,7 @@ void spice_msg_out_send(SpiceMsgOut *out)
> }
>
> end:
> - g_mutex_unlock(&out->channel->priv->xmit_queue_lock);
> + STATIC_MUTEX_UNLOCK(out->channel->priv->xmit_queue_lock);
> }
>
> /* coroutine context */
> @@ -1972,9 +1972,9 @@ static void spice_channel_iterate_write(SpiceChannel *channel)
> SpiceMsgOut *out;
>
> do {
> - g_mutex_lock(&c->xmit_queue_lock);
> + STATIC_MUTEX_LOCK(c->xmit_queue_lock);
> out = g_queue_pop_head(&c->xmit_queue);
> - g_mutex_unlock(&c->xmit_queue_lock);
> + STATIC_MUTEX_UNLOCK(c->xmit_queue_lock);
> if (out)
> spice_channel_write_msg(channel, out);
> } while (out);
> @@ -2373,7 +2373,7 @@ static void channel_reset(SpiceChannel *channel, gboolean migrating)
> c->peer_msg = NULL;
> c->peer_pos = 0;
>
> - g_mutex_lock(&c->xmit_queue_lock);
> + STATIC_MUTEX_LOCK(c->xmit_queue_lock);
> c->xmit_queue_blocked = TRUE; /* Disallow queuing new messages */
> g_queue_foreach(&c->xmit_queue, (GFunc)spice_msg_out_unref, NULL);
> g_queue_clear(&c->xmit_queue);
> @@ -2381,7 +2381,7 @@ static void channel_reset(SpiceChannel *channel, gboolean migrating)
> g_source_remove(c->xmit_queue_wakeup_id);
> c->xmit_queue_wakeup_id = 0;
> }
> - g_mutex_unlock(&c->xmit_queue_lock);
> + STATIC_MUTEX_UNLOCK(c->xmit_queue_lock);
>
> g_array_set_size(c->remote_common_caps, 0);
> g_array_set_size(c->remote_caps, 0);
> diff --git a/gtk/spice-util-priv.h b/gtk/spice-util-priv.h
> index 4d52100..1be0edf 100644
> --- a/gtk/spice-util-priv.h
> +++ b/gtk/spice-util-priv.h
> @@ -27,6 +27,20 @@ G_BEGIN_DECLS
> gboolean spice_strv_contains(const GStrv strv, const gchar *str);
> gchar* spice_uuid_to_string(const guint8 uuid[16]);
>
> +#if GLIB_CHECK_VERSION(2,32,0)
> +#define STATIC_MUTEX GMutex
> +#define STATIC_MUTEX_INIT(m) g_mutex_init(&(m))
> +#define STATIC_MUTEX_CLEAR(m) g_mutex_clear(&(m))
> +#define STATIC_MUTEX_LOCK(m) g_mutex_lock(&(m))
> +#define STATIC_MUTEX_UNLOCK(m) g_mutex_unlock(&(m))
> +#else
> +#define STATIC_MUTEX GStaticMutex
> +#define STATIC_MUTEX_INIT(m) g_static_mutex_init(&(m))
> +#define STATIC_MUTEX_CLEAR(m) g_static_mutex_free(&(m))
> +#define STATIC_MUTEX_LOCK(m) g_static_mutex_lock(&(m))
> +#define STATIC_MUTEX_UNLOCK(m) g_static_mutex_unlock(&(m))
> +#endif
> +
> G_END_DECLS
>
> #endif /* SPICE_UTIL_PRIV_H */
More information about the Spice-devel
mailing list