diff --git a/src/op_cache.cpp b/src/op_cache.cpp index 126564c5..772531c3 100644 --- a/src/op_cache.cpp +++ b/src/op_cache.cpp @@ -133,8 +133,7 @@ SearchCache::listen(ValueCallback get_cb, Sp q, Value::Filter filter, std auto token = nextToken_++; if (nextToken_ == 0) nextToken_++; - op->second->addListener(token, get_cb, q, filter); - return token; + return op->second->addListener(token, get_cb, q, filter) ? token : 0; } bool diff --git a/src/op_cache.h b/src/op_cache.h index 7dc4419f..05544ff8 100644 --- a/src/op_cache.h +++ b/src/op_cache.h @@ -87,11 +87,12 @@ public: void onValuesAdded(const std::vector>& vals); void onValuesExpired(const std::vector>& vals); - void addListener(size_t token, ValueCallback cb, Sp q, Value::Filter filter) { + bool addListener(size_t token, ValueCallback cb, Sp q, Value::Filter filter) { listeners.emplace(token, LocalListener{q, filter, cb}); auto cached = cache.get(filter); if (not cached.empty()) - cb(cached, false); + return cb(cached, false); + return true; } bool removeListener(size_t token, const time_point& now) {