logger: only add data message to the log if orb_copy succeeds, when adding a new instance

This commit is contained in:
Beat Küng
2016-08-12 17:59:17 +02:00
parent df53fb0fde
commit 528ca931af
2 changed files with 8 additions and 4 deletions

View File

@@ -441,7 +441,7 @@ bool Logger::copy_if_updated_multi(LoggerSubscription &sub, int multi_instance,
if (OK == orb_exists(sub.metadata, multi_instance)) { if (OK == orb_exists(sub.metadata, multi_instance)) {
handle = orb_subscribe_multi(sub.metadata, multi_instance); handle = orb_subscribe_multi(sub.metadata, multi_instance);
//PX4_INFO("subscribed to instance %d of topic %s", multi_instance, topic->o_name); //PX4_INFO("subscribed to instance %d of topic %s", multi_instance, sub.metadata->o_name);
/* copy first data */ /* copy first data */
if (handle >= 0) { if (handle >= 0) {
@@ -454,8 +454,11 @@ bool Logger::copy_if_updated_multi(LoggerSubscription &sub, int multi_instance,
orb_set_interval(handle, interval); orb_set_interval(handle, interval);
} }
orb_copy(sub.metadata, handle, buffer); /* It can happen that orb_exists returns true, even if there is no publisher (but another subscriber).
updated = true; * We catch this here, because orb_copy will fail in this case. */
if (orb_copy(sub.metadata, handle, buffer) == PX4_OK) {
updated = true;
}
} }
} }

View File

@@ -295,7 +295,8 @@ public:
int orb_stat(int handle, uint64_t *time) ; int orb_stat(int handle, uint64_t *time) ;
/** /**
* Check if a topic has already been created. * Check if a topic has already been created (a publisher or a subscriber exists with
* the given instance).
* *
* @param meta ORB topic metadata. * @param meta ORB topic metadata.
* @param instance ORB instance * @param instance ORB instance