[gnome-calendar/gbsneto/recurring-event-editing-fixes: 3/18] calendar-monitor: Replace mutex by a rw-lock
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/gbsneto/recurring-event-editing-fixes: 3/18] calendar-monitor: Replace mutex by a rw-lock
- Date: Fri, 14 Oct 2022 17:53:54 +0000 (UTC)
commit 26b3bec12b3c1209b44d857692fbb87f3b3158d3
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Thu Oct 13 22:07:56 2022 -0300
calendar-monitor: Replace mutex by a rw-lock
This will be more appropriate once we start accessing the events
hash table from the monitor thread.
src/core/gcal-calendar-monitor.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
---
diff --git a/src/core/gcal-calendar-monitor.c b/src/core/gcal-calendar-monitor.c
index c16131b0..481d1a35 100644
--- a/src/core/gcal-calendar-monitor.c
+++ b/src/core/gcal-calendar-monitor.c
@@ -76,7 +76,7 @@ struct _GcalCalendarMonitor
* a locked muxed.
*/
struct {
- GMutex mutex;
+ GRWLock lock;
GcalRange *range;
gchar *filter;
} shared;
@@ -178,9 +178,9 @@ get_monitor_ranges (GcalCalendarMonitor *self)
{
g_autoptr (GcalRange) range = NULL;
- g_mutex_lock (&self->shared.mutex);
+ g_rw_lock_reader_lock (&self->shared.lock);
range = gcal_range_copy (self->shared.range);
- g_mutex_unlock (&self->shared.mutex);
+ g_rw_lock_reader_unlock (&self->shared.lock);
return g_steal_pointer (&range);
}
@@ -607,20 +607,20 @@ create_view (GcalCalendarMonitor *self)
GCAL_ENTRY;
- g_mutex_lock (&self->shared.mutex);
+ g_rw_lock_reader_lock (&self->shared.lock);
g_assert (self->cancellable == NULL);
self->cancellable = g_cancellable_new ();
if (!self->shared.range)
{
- g_mutex_unlock (&self->shared.mutex);
+ g_rw_lock_reader_unlock (&self->shared.lock);
GCAL_RETURN ();
}
filter = build_subscriber_filter (self->shared.range, self->shared.filter);
- g_mutex_unlock (&self->shared.mutex);
+ g_rw_lock_reader_unlock (&self->shared.lock);
if (!gcal_calendar_get_visible (self->calendar))
GCAL_RETURN ();
@@ -1128,6 +1128,8 @@ gcal_calendar_monitor_init (GcalCalendarMonitor *self)
self->main_context = g_main_context_ref_thread_default ();
self->messages = g_async_queue_new ();
self->complete = FALSE;
+
+ g_rw_lock_init (&self->shared.lock);
}
GcalCalendarMonitor*
@@ -1157,7 +1159,7 @@ gcal_calendar_monitor_set_range (GcalCalendarMonitor *self,
GCAL_ENTRY;
- g_mutex_lock (&self->shared.mutex);
+ g_rw_lock_writer_lock (&self->shared.lock);
range_changed =
!self->shared.range ||
@@ -1166,14 +1168,14 @@ gcal_calendar_monitor_set_range (GcalCalendarMonitor *self,
if (!range_changed)
{
- g_mutex_unlock (&self->shared.mutex);
+ g_rw_lock_writer_unlock (&self->shared.lock);
GCAL_RETURN ();
}
g_clear_pointer (&self->shared.range, gcal_range_unref);
self->shared.range = range ? gcal_range_copy (range) : NULL;
- g_mutex_unlock (&self->shared.mutex);
+ g_rw_lock_writer_unlock (&self->shared.lock);
maybe_spawn_view_thread (self);
remove_events_outside_range (self, range);
@@ -1213,12 +1215,12 @@ gcal_calendar_monitor_set_filter (GcalCalendarMonitor *self,
{
g_return_if_fail (GCAL_IS_CALENDAR_MONITOR (self));
- g_mutex_lock (&self->shared.mutex);
+ g_rw_lock_writer_lock (&self->shared.lock);
g_clear_pointer (&self->shared.filter, g_free);
self->shared.filter = g_strdup (filter);
- g_mutex_unlock (&self->shared.mutex);
+ g_rw_lock_writer_unlock (&self->shared.lock);
remove_all_events (self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]