summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuergen Gehring <juergen.gehring@bmw.de>2018-05-22 02:56:43 -0700
committerJuergen Gehring <juergen.gehring@bmw.de>2018-05-22 02:56:43 -0700
commita2b23e379fe383103cdf38cab7547a1e7451b9e2 (patch)
treeb7026847e02bf764c21b44d572a5bcee13fc9c96
parent3fe1afd0de1fd7c167d89ca75702e4627357ef5e (diff)
downloadvSomeIP-2.10.15.tar.gz
vsomeip 2.10.152.10.15
-rw-r--r--CHANGES3
-rw-r--r--CMakeLists.txt2
-rw-r--r--implementation/routing/src/routing_manager_impl.cpp19
3 files changed, 22 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 282a5e5..acadc1a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,8 @@
Changes
=======
+v2.10.15
+- Fix remote event caching
+
v2.10.14
- Bugfix for pending subscriptions when same port is used
for TCP and UDP endpoint option.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e687bab..7b6469e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,7 +8,7 @@ project (vsomeip)
set (VSOMEIP_MAJOR_VERSION 2)
set (VSOMEIP_MINOR_VERSION 10)
-set (VSOMEIP_PATCH_VERSION 14)
+set (VSOMEIP_PATCH_VERSION 15)
set (VSOMEIP_VERSION ${VSOMEIP_MAJOR_VERSION}.${VSOMEIP_MINOR_VERSION}.${VSOMEIP_PATCH_VERSION})
set (PACKAGE_VERSION ${VSOMEIP_VERSION}) # Used in documentatin/doxygen.in
set (CMAKE_VERBOSE_MAKEFILE off)
diff --git a/implementation/routing/src/routing_manager_impl.cpp b/implementation/routing/src/routing_manager_impl.cpp
index 33e4e46..add0fb9 100644
--- a/implementation/routing/src/routing_manager_impl.cpp
+++ b/implementation/routing/src/routing_manager_impl.cpp
@@ -1575,7 +1575,24 @@ bool routing_manager_impl::deliver_notification(
if (its_event) {
if (!its_event->is_provided()) {
if (its_event->get_subscribers().size() == 0) {
- return true; // as there is nothing to do
+ // no subscribers for this specific event / check subscriptions
+ // to other events of the event's eventgroups
+ bool cache_event = false;
+ for (const auto eg : its_event->get_eventgroups()) {
+ std::shared_ptr<eventgroupinfo> egi = find_eventgroup(_service, _instance, eg);
+ for (const auto &e : egi->get_events()) {
+ cache_event = (e->get_subscribers().size() > 0);
+ if (cache_event) {
+ break;
+ }
+ }
+ if (cache_event) {
+ break;
+ }
+ }
+ if (!cache_event) {
+ return true; // as there is nothing to do
+ }
}
const uint32_t its_length(utility::get_payload_size(_data, _length));
std::shared_ptr<payload> its_payload