uORB::Publication skip unadvertise on destruction if there are still subscribers

This commit is contained in:
Daniel Agar 2023-12-07 21:24:59 -05:00
parent 936c18733b
commit efc6a5036b
3 changed files with 8 additions and 1 deletions

View File

@ -84,7 +84,7 @@ protected:
{
if (_handle != nullptr) {
// don't automatically unadvertise queued publications (eg vehicle_command)
if (Manager::orb_get_queue_size(_handle) == 1) {
if ((Manager::orb_get_queue_size(_handle) == 1) && (Manager::orb_get_subscriber_count(_handle) <= 0)) {
unadvertise();
}
}

View File

@ -455,6 +455,11 @@ void uORB::Manager::orb_remove_internal_subscriber(void *node_handle)
uint8_t uORB::Manager::orb_get_queue_size(const void *node_handle) { return static_cast<const DeviceNode *>(node_handle)->get_queue_size(); }
int8_t uORB::Manager::orb_get_subscriber_count(const void *node_handle)
{
return static_cast<const DeviceNode *>(node_handle)->subscriber_count();
}
bool uORB::Manager::orb_data_copy(void *node_handle, void *dst, unsigned &generation, bool only_if_updated)
{
if (!is_advertised(node_handle)) {

View File

@ -445,6 +445,8 @@ public:
static uint8_t orb_get_queue_size(const void *node_handle);
static int8_t orb_get_subscriber_count(const void *node_handle);
static bool orb_data_copy(void *node_handle, void *dst, unsigned &generation, bool only_if_updated);
static bool register_callback(void *node_handle, SubscriptionCallback *callback_sub);