diff --git a/thunar-volman/tvm-crypto-volume.c b/thunar-volman/tvm-crypto-volume.c index 550089e..2f595d3 100644 --- a/thunar-volman/tvm-crypto-volume.c +++ b/thunar-volman/tvm-crypto-volume.c @@ -257,6 +257,13 @@ tvm_crypto_volume_dbus_call_done (DBusPendingCall *call, gtk_main_quit(); } +static gboolean +get_udi_again (gpointer user_data) +{ + gtk_main_quit(); + return FALSE; +} + static gchar * tvm_crypto_volume_mount_install_crypto_volume (LibHalContext *context, const gchar *udi, @@ -388,8 +395,19 @@ oom: g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOMEM, g_strerror (ENOMEM)) } else { + gint num_tries = 0; dbus_message_unref (result); - plain_udi = libhal_volume_crypto_get_clear_volume_udi (context, volume); + while (plain_udi == NULL && num_tries < 3) { + plain_udi = libhal_volume_crypto_get_clear_volume_udi (context, volume); + if (plain_udi == NULL) { + /* asking for the plain UDI too quickly may get a NULL one. Let's try + * again after one second. */ + g_timeout_add_seconds(1, get_udi_again, NULL); + gtk_main(); + } + num_tries++; + g_debug("try %d, plain udi %s", num_tries, plain_udi); + } } out: