[Spice-devel] [PATCH spice-gtk] smartcard: do not register monitor before smartcard init
Marc-André Lureau
marcandre.lureau at gmail.com
Mon Feb 25 16:36:23 PST 2013
Never call vevent_get_next_vevent() before calling vcard_emul_init()
Some mutexes are initialized in vevent_queue_init(), during emul_init()
---
gtk/smartcard-manager.c | 34 +++++++++++++++++++++-------------
1 file changed, 21 insertions(+), 13 deletions(-)
diff --git a/gtk/smartcard-manager.c b/gtk/smartcard-manager.c
index ab3229f..51f228a 100644
--- a/gtk/smartcard-manager.c
+++ b/gtk/smartcard-manager.c
@@ -94,8 +94,6 @@ static guint signals[SPICE_SMARTCARD_MANAGER_LAST_SIGNAL];
#ifdef USE_SMARTCARD
typedef gboolean (*SmartcardSourceFunc)(VEvent *event, gpointer user_data);
-static guint smartcard_monitor_add(SmartcardSourceFunc callback,
- gpointer user_data);
static gboolean smartcard_monitor_dispatch(VEvent *event, gpointer user_data);
#endif
@@ -107,10 +105,6 @@ static void spice_smartcard_manager_init(SpiceSmartcardManager *smartcard_manage
priv = SPICE_SMARTCARD_MANAGER_GET_PRIVATE(smartcard_manager);
smartcard_manager->priv = priv;
-#ifdef USE_SMARTCARD
- priv->monitor_id = smartcard_monitor_add(smartcard_monitor_dispatch,
- smartcard_manager);
-#endif
}
static void spice_smartcard_manager_dispose(GObject *gobject)
@@ -394,6 +388,18 @@ static guint smartcard_monitor_add(SmartcardSourceFunc callback,
return id;
}
+static void
+spice_smartcard_manager_update_monitor(void)
+{
+ SpiceSmartcardManager *self = spice_smartcard_manager_get();
+ SpiceSmartcardManagerPrivate *priv = self->priv;
+
+ if (priv->monitor_id != 0)
+ return;
+
+ priv->monitor_id = smartcard_monitor_add(smartcard_monitor_dispatch, self);
+}
+
#define SPICE_SOFTWARE_READER_NAME "Spice Software Smartcard"
/**
@@ -512,17 +518,19 @@ gboolean spice_smartcard_manager_init_finish(SpiceSession *session,
GAsyncResult *result,
GError **err)
{
+ GSimpleAsyncResult *simple;
+
g_return_val_if_fail(SPICE_IS_SESSION(session), FALSE);
- g_return_val_if_fail(G_IS_ASYNC_RESULT(result), FALSE);
+ g_return_val_if_fail(G_IS_SIMPLE_ASYNC_RESULT(result), FALSE);
SPICE_DEBUG("smartcard_manager_finish");
- if (G_IS_SIMPLE_ASYNC_RESULT(result)) {
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT(result);
- g_warn_if_fail(g_simple_async_result_get_source_tag(simple) == spice_smartcard_manager_init);
- if (g_simple_async_result_propagate_error(simple, err))
- return FALSE;
- }
+ simple = G_SIMPLE_ASYNC_RESULT(result);
+ g_return_val_if_fail(g_simple_async_result_get_source_tag(simple) == spice_smartcard_manager_init, FALSE);
+ if (g_simple_async_result_propagate_error(simple, err))
+ return FALSE;
+
+ spice_smartcard_manager_update_monitor();
return TRUE;
}
--
1.8.1.1.439.g50a6b54
More information about the Spice-devel
mailing list