void LimitlessMonitorService::DecrementReferenceCounter()

in src/limitless/limitless_monitor_service.cc [134:154]


void LimitlessMonitorService::DecrementReferenceCounter(const std::string& service_id) {
    std::lock_guard<std::mutex> services_guard(*(this->services_mutex));
    if (!this->services.contains(service_id)) {
        LOG(ERROR) << "Attempted to decrement reference counter for non-existent monitor with service ID " << service_id;
        return;
    }

    std::shared_ptr<LimitlessMonitor> service = this->services[service_id];

    if (service->reference_counter > 0) {
        service->reference_counter--;
    } else {
        LOG(ERROR) << "Monitor with service ID " << service_id << " has improper reference counter";
    }

    if (service->reference_counter == 0) {
        service = nullptr;
        services.erase(service_id);
        LOG(INFO) << "Stopped monitoring with service ID " << service_id;
    }
}