mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 19:42:05 +00:00
idle-monitor: Fix a warning when a callback removes the user active watch
The user active watch is a one-fire watch, but it is valid in the API for the callback to explicitly remove the watch itself. In that case, the watch will be invalid after the user removes it, and the memory potentially freed. So make sure to not dereference the watch after the callback is called. https://bugzilla.gnome.org/show_bug.cgi?id=706825
This commit is contained in:
parent
ab72352c47
commit
6526e9882b
@ -110,19 +110,20 @@ static void
|
||||
fire_watch (MetaIdleMonitorWatch *watch)
|
||||
{
|
||||
MetaIdleMonitor *monitor;
|
||||
guint id;
|
||||
gboolean is_user_active_watch;
|
||||
|
||||
monitor = watch->monitor;
|
||||
g_object_ref (monitor);
|
||||
|
||||
if (watch->callback)
|
||||
{
|
||||
watch->callback (watch->monitor,
|
||||
watch->id,
|
||||
watch->user_data);
|
||||
}
|
||||
id = watch->id;
|
||||
is_user_active_watch = (watch->timeout_msec == 0);
|
||||
|
||||
if (watch->timeout_msec == 0)
|
||||
meta_idle_monitor_remove_watch (watch->monitor, watch->id);
|
||||
if (watch->callback)
|
||||
watch->callback (monitor, id, watch->user_data);
|
||||
|
||||
if (is_user_active_watch)
|
||||
meta_idle_monitor_remove_watch (monitor, id);
|
||||
|
||||
g_object_unref (monitor);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user