summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Hruby <michal.mhr@gmail.com>2010-08-09 15:38:56 +0200
committerMichal Hruby <michal.mhr@gmail.com>2010-08-09 15:38:56 +0200
commit980a03e9b301e93e82a259ccbfe28947c4232d1c (patch)
tree7f3280e00eebe17cb446661494fdcf2f2146316d
parentb5d7149f1c60f39f84f1ba700db31aa88fe45f30 (diff)
Fix race condition in getting last_timestampv0.5.10.5
-rw-r--r--src/data-provider.vala4
-rw-r--r--src/recent-manager-provider.vala10
-rw-r--r--src/zeitgeist-datahub.vala20
3 files changed, 25 insertions, 9 deletions
diff --git a/src/data-provider.vala b/src/data-provider.vala
index 3c16b11..b125836 100644
--- a/src/data-provider.vala
+++ b/src/data-provider.vala
@@ -37,6 +37,10 @@ public abstract class DataProvider : Object
{
items_available ();
}
+
+ public virtual void stop ()
+ {
+ }
protected abstract List<Event> _get_items ();
// DataHub will call get_items when items_available is emitted
diff --git a/src/recent-manager-provider.vala b/src/recent-manager-provider.vala
index c6266ce..f789384 100644
--- a/src/recent-manager-provider.vala
+++ b/src/recent-manager-provider.vala
@@ -52,8 +52,18 @@ public class RecentManagerGtk : DataProvider
recent_manager = Gtk.RecentManager.get_default ();
recent_manager.set_limit (-1);
+ }
+ public override void start ()
+ {
recent_manager.changed.connect (this.items_changed);
+
+ items_available ();
+ }
+
+ public override void stop ()
+ {
+ recent_manager.changed.disconnect (this.items_changed);
}
private void items_changed ()
diff --git a/src/zeitgeist-datahub.vala b/src/zeitgeist-datahub.vala
index 3c6c4a0..cd80a5e 100644
--- a/src/zeitgeist-datahub.vala
+++ b/src/zeitgeist-datahub.vala
@@ -112,6 +112,17 @@ public class DataHub : Object, DataHubService
foreach (unowned DataProvider prov in providers)
{
bool enabled = true;
+ // we need to get the timestamp before we register the data provider
+ int64 timestamp = 0;
+ foreach (var src in sources_info)
+ {
+ if (src.get_unique_id () == prov.unique_id)
+ {
+ timestamp = src.get_timestamp ();
+ break;
+ }
+ }
+
if (prov.register)
{
var ds = new DataSource.full (prov.unique_id,
@@ -130,15 +141,6 @@ public class DataHub : Object, DataHubService
prov.items_available.connect (this.items_available);
if (enabled)
{
- int64 timestamp = 0;
- foreach (var src in sources_info)
- {
- if (src.get_unique_id () == prov.unique_id)
- {
- timestamp = src.get_timestamp ();
- break;
- }
- }
prov.last_timestamp = timestamp;
prov.start ();
}