[gnome-builder] progress: fix possible deadlock when setting completed
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] progress: fix possible deadlock when setting completed
- Date: Thu, 16 Feb 2017 08:44:08 +0000 (UTC)
commit c0e6f46a4e06ce1323e24ccfbf1be8a5a16df40b
Author: Christian Hergert <chergert redhat com>
Date: Thu Feb 16 00:43:57 2017 -0800
progress: fix possible deadlock when setting completed
libide/util/ide-progress.c | 20 ++++++++++++++------
1 files changed, 14 insertions(+), 6 deletions(-)
---
diff --git a/libide/util/ide-progress.c b/libide/util/ide-progress.c
index d546359..ec93e40 100644
--- a/libide/util/ide-progress.c
+++ b/libide/util/ide-progress.c
@@ -61,11 +61,10 @@ ide_progress_set_completed (IdeProgress *self,
g_mutex_lock (&self->mutex);
if (self->completed != completed)
- {
- self->completed = completed;
- ide_object_notify_in_main (G_OBJECT (self), properties [PROP_COMPLETED]);
- }
+ self->completed = completed;
g_mutex_unlock (&self->mutex);
+
+ ide_object_notify_in_main (G_OBJECT (self), properties [PROP_COMPLETED]);
}
gdouble
@@ -86,6 +85,9 @@ void
ide_progress_set_fraction (IdeProgress *self,
gdouble fraction)
{
+ gboolean do_completed = FALSE;
+ gboolean do_notify = FALSE;
+
g_return_if_fail (IDE_IS_PROGRESS (self));
g_return_if_fail (fraction >= 0.0);
g_return_if_fail (fraction <= 1.0);
@@ -95,10 +97,16 @@ ide_progress_set_fraction (IdeProgress *self,
{
self->fraction = fraction;
if (fraction == 1.0)
- ide_progress_set_completed (self, TRUE);
- ide_object_notify_in_main (G_OBJECT (self), properties [PROP_FRACTION]);
+ do_completed = TRUE;
+ do_notify = TRUE;
}
g_mutex_unlock (&self->mutex);
+
+ if (do_completed)
+ ide_progress_set_completed (self, TRUE);
+
+ if (do_notify)
+ ide_object_notify_in_main (G_OBJECT (self), properties [PROP_FRACTION]);
}
gchar *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]