Hi On Tue, Jul 5, 2011 at 10:37 AM, Christophe Fergeau <[email protected]> wrote: > Now that libcacard initialization is run asynchronously, > the methods to insert/remove a software smartcard need to make > sure libcacard is initialized before trying to trigger such an > insertion/removal. When these functions are called too early, > the insertion/removal attempt is ignored. > --- > gtk/smartcard-manager.c | 14 ++++++++++++++ > 1 files changed, 14 insertions(+), 0 deletions(-) > > diff --git a/gtk/smartcard-manager.c b/gtk/smartcard-manager.c > index 9565840..16029c7 100644 > --- a/gtk/smartcard-manager.c > +++ b/gtk/smartcard-manager.c > @@ -59,6 +59,7 @@ struct spice_smartcard_manager { > */ > #ifdef USE_SMARTCARD > VReader *software_reader; > + gboolean libcacard_inited; > #endif > }; > > @@ -389,6 +390,14 @@ gboolean > spice_smartcard_reader_is_software(SpiceSmartCardReader *reader) > return (strcmp(vreader_get_name((VReader*)reader), > SPICE_SOFTWARE_READER_NAME) == 0); > } > > +static gboolean spice_libcacard_inited(G_GNUC_UNUSED gpointer data) > +{ > + SpiceSmartCardManager *manager = spice_smartcard_manager_get(); > + > + manager->priv->libcacard_inited = TRUE; > + return FALSE; > +} > + > static gpointer spice_vcard_emul_init_thread(gpointer data) > { > VCardEmulError error; > @@ -398,6 +407,7 @@ static gpointer spice_vcard_emul_init_thread(gpointer > data) > if (error != VCARD_EMUL_OK) { > g_critical("vcard_emul_init() failed: %d", error); > } > + g_idle_add(spice_libcacard_inited, NULL); > > return NULL; > } > @@ -460,6 +470,8 @@ gboolean > spice_smartcard_manager_insert_card(SpiceSmartCardManager *manager) > VCardEmulError status; > > g_return_val_if_fail(manager->priv->software_reader != NULL, FALSE); > + if (!manager->priv->libcacard_inited) > + return FALSE; > > status = vcard_emul_force_card_insert(manager->priv->software_reader); > > @@ -471,6 +483,8 @@ gboolean > spice_smartcard_manager_remove_card(SpiceSmartCardManager *manager) > VCardEmulError status; > > g_return_val_if_fail(manager->priv->software_reader != NULL, FALSE); > + if (!manager->priv->libcacard_inited) > + return FALSE;
We could use a debug message here. -- Marc-André Lureau _______________________________________________ Spice-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/spice-devel
