summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2013-06-01 13:56:43 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2013-06-01 13:56:43 +0200
commit6d932f4bdaa54710bd34af08284bc55f36fb7346 (patch)
treee0b9d7bcfd0601ef864da3620deade1055d40b79
parent793a5ae0b1ede28a3b011ba3f25c6778bd6b646a (diff)
downloadzeitgeist-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.vala5
-rw-r--r--libzeitgeist/log.vala16
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);
}
/**