diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2013-06-01 13:56:43 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2013-06-01 13:56:43 +0200 |
commit | 6d932f4bdaa54710bd34af08284bc55f36fb7346 (patch) | |
tree | e0b9d7bcfd0601ef864da3620deade1055d40b79 | |
parent | 793a5ae0b1ede28a3b011ba3f25c6778bd6b646a (diff) | |
download | zeitgeist-6d932f4bdaa54710bd34af08284bc55f36fb7346.tar.gz |
Fix managing and tracking registered Monitors
Reset ids of known monitors in on_connection_lost to have reinstall_montior
working properly. Remove monitors from internal hashtable when needed.
-rw-r--r-- | examples/vala/monitor-events.vala | 5 | ||||
-rw-r--r-- | libzeitgeist/log.vala | 16 |
2 files changed, 16 insertions, 5 deletions
diff --git a/examples/vala/monitor-events.vala b/examples/vala/monitor-events.vala index ed6feab4..a1e1dd1d 100644 --- a/examples/vala/monitor-events.vala +++ b/examples/vala/monitor-events.vala @@ -26,6 +26,11 @@ int main () //monitor.events_deleted.connect (on_events_deleted); log.install_monitor (monitor); + Timeout.add (2000, () => + { + log.remove_monitor (monitor); + return false; + }); loop.run (); return 0; diff --git a/libzeitgeist/log.vala b/libzeitgeist/log.vala index aa6faeee..02b16ca9 100644 --- a/libzeitgeist/log.vala +++ b/libzeitgeist/log.vala @@ -166,6 +166,12 @@ public class Log : QueuedProxyWrapper protected override void on_connection_lost () { + // Reset the monitor's registration id (0 = not registered) + foreach (unowned Monitor monitor in monitors.get_keys ()) + { + monitors.replace (monitor, 0); + } + dbreader = null; } @@ -546,7 +552,7 @@ public class Log : QueuedProxyWrapper { uint registration_id = conn.register_object<RemoteMonitor> ( monitor.get_path (), monitor); - monitors.insert (monitor, registration_id); + monitors.replace (monitor, registration_id); } catch (GLib.IOError err) { @@ -566,13 +572,11 @@ public class Log : QueuedProxyWrapper * * @param monitor A {@link Monitor} to report back inserts and deletes */ - public async void remove_monitor (owned Monitor monitor) throws Error + public void remove_monitor (owned Monitor monitor) throws Error { - yield wait_for_proxy (); - try { - yield proxy.remove_monitor (monitor.get_path ()); + proxy.remove_monitor.begin (monitor.get_path ()); } catch (IOError err) { @@ -588,6 +592,8 @@ public class Log : QueuedProxyWrapper var connection = ((DBusProxy) proxy).get_connection (); connection.unregister_object (registration_id); } + + monitors.remove (monitor); } /** |