| 2825 | } |
| 2826 | |
| 2827 | void routing_manager_client::unregister_event_base(client_t _client, service_t _service, instance_t _instance, event_t _event, |
| 2828 | bool _is_provided) { |
| 2829 | std::shared_ptr<event> its_unrefed_event; |
| 2830 | auto remove_client_ref = [_client, _service, _instance, _event, _is_provided, &its_unrefed_event](auto& events_map) { |
| 2831 | auto it_search = events_map.find(service_instance_t{_service, _instance}); |
| 2832 | if (it_search == events_map.end()) { |
| 2833 | return; |
| 2834 | } |
| 2835 | const auto found_event = it_search->second.find(_event); |
| 2836 | if (found_event != it_search->second.end()) { |
| 2837 | auto its_event = found_event->second; |
| 2838 | its_event->remove_ref(_client, _is_provided); |
| 2839 | if (!its_event->has_ref()) { |
| 2840 | its_unrefed_event = its_event; |
| 2841 | it_search->second.erase(found_event); |
| 2842 | } else if (_is_provided) { |
| 2843 | its_event->set_provided(false); |
| 2844 | } |
| 2845 | } |
| 2846 | }; |
| 2847 | |
| 2848 | if (_is_provided) { |
| 2849 | std::scoped_lock its_lock(provider_mutex_); |
| 2850 | remove_client_ref(provided_events_); |
| 2851 | } else { |
| 2852 | std::scoped_lock its_lock(consumer_mutex_); |
| 2853 | remove_client_ref(consumed_events_); |
| 2854 | } |
| 2855 | |
| 2856 | if (its_unrefed_event) { |
| 2857 | auto its_eventgroups = its_unrefed_event->get_eventgroups(); |
| 2858 | for (auto eg : its_eventgroups) { |
| 2859 | auto its_eventgroup_info = find_eventgroup(_service, _instance, eg, _is_provided); |
| 2860 | if (its_eventgroup_info) { |
| 2861 | its_eventgroup_info->remove_event(its_unrefed_event); |
| 2862 | if (0 == its_eventgroup_info->get_events().size()) { |
| 2863 | remove_eventgroup_info(_service, _instance, eg, _is_provided); |
| 2864 | } |
| 2865 | } |
| 2866 | } |
| 2867 | } |
| 2868 | } |
| 2869 | |
| 2870 | void routing_manager_client::remove_eventgroup_info(service_t _service, instance_t _instance, eventgroup_t _eventgroup, bool _is_provided) { |
| 2871 | auto update_eventgroup = [_service, _instance, _eventgroup](auto& eventgroup) { |
nothing calls this directly
no test coverage detected