summaryrefslogtreecommitdiff
path: root/gtk/smartcard-manager.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2013-02-26 01:10:59 +0100
committerMarc-André Lureau <marcandre.lureau@redhat.com>2013-02-26 11:31:40 +0100
commit736a2298b0c281e5f7bd19e5f0e833707675032a (patch)
tree81e7487b92e532b4cc5d6b687047b52d26626f94 /gtk/smartcard-manager.c
parent5b9351666c97610d45133f019eaff9c5140efc47 (diff)
smartcard: do not register monitor before smartcard init
Never call vevent_get_next_vevent() before calling vcard_emul_init() Some mutexes are initialized in vevent_queue_init(), during emul_init()
Diffstat (limited to 'gtk/smartcard-manager.c')
-rw-r--r--gtk/smartcard-manager.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/gtk/smartcard-manager.c b/gtk/smartcard-manager.c
index dbb121f..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"
/**
@@ -524,6 +530,8 @@ gboolean spice_smartcard_manager_init_finish(SpiceSession *session,
if (g_simple_async_result_propagate_error(simple, err))
return FALSE;
+ spice_smartcard_manager_update_monitor();
+
return TRUE;
}