GTlsInteraction: Fix incorrect locking of mutex

* Fix incorrect locking of mutex in g_tls_interaction_invoke_ask_password()

https://bugzilla.gnome.org/show_bug.cgi?id=678758
This commit is contained in:
Stef Walter
2012-06-28 14:41:39 +02:00
committed by Matthias Clasen
parent c1aac005d2
commit 5bf587caa0

View File

@@ -321,6 +321,7 @@ g_tls_interaction_invoke_ask_password (GTlsInteraction *interaction,
GTlsInteractionResult result; GTlsInteractionResult result;
InvokeClosure *closure; InvokeClosure *closure;
GTlsInteractionClass *klass; GTlsInteractionClass *klass;
gboolean complete;
g_return_val_if_fail (G_IS_TLS_INTERACTION (interaction), G_TLS_INTERACTION_UNHANDLED); g_return_val_if_fail (G_IS_TLS_INTERACTION (interaction), G_TLS_INTERACTION_UNHANDLED);
g_return_val_if_fail (G_IS_TLS_PASSWORD (password), G_TLS_INTERACTION_UNHANDLED); g_return_val_if_fail (G_IS_TLS_PASSWORD (password), G_TLS_INTERACTION_UNHANDLED);
@@ -348,12 +349,16 @@ g_tls_interaction_invoke_ask_password (GTlsInteraction *interaction,
*/ */
if (g_main_context_acquire (interaction->priv->context)) if (g_main_context_acquire (interaction->priv->context))
{ {
while (!closure->complete) for (;;)
{ {
g_mutex_unlock (&closure->mutex);
g_main_context_iteration (interaction->priv->context, TRUE);
g_mutex_lock (&closure->mutex); g_mutex_lock (&closure->mutex);
complete = closure->complete;
g_mutex_unlock (&closure->mutex);
if (complete)
break;
g_main_context_iteration (interaction->priv->context, TRUE);
} }
g_main_context_release (interaction->priv->context); g_main_context_release (interaction->priv->context);
if (closure->error) if (closure->error)