MCPcopy Create free account
hub / github.com/COVESA/vsomeip / unregister_event_base

Method unregister_event_base

implementation/routing/src/routing_manager_client.cpp:2827–2868  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2825}
2826
2827void 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
2870void 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) {

Callers

nothing calls this directly

Calls 8

endMethod · 0.80
remove_refMethod · 0.80
has_refMethod · 0.80
remove_eventMethod · 0.80
get_eventsMethod · 0.80
set_providedMethod · 0.45
get_eventgroupsMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected