/** * \brief Remove data manager from list, close it and free templates * * \param[in] output_manager Output Manager structure * \param[in] old_manager Data Manager to remove and close */ void output_manager_remove(struct output_manager_config *output_manager, struct data_manager_config *old_manager) { struct data_manager_config *aux_conf = output_manager->data_managers; if (aux_conf == old_manager) { output_manager->data_managers = old_manager->next; } while (aux_conf->next) { if (aux_conf->next == old_manager) { aux_conf->next = old_manager->next; if (output_manager->last == old_manager) { output_manager->last = aux_conf; } break; } else { aux_conf = aux_conf->next; } } if (output_manager->data_managers == NULL) { output_manager->last = NULL; } uint32_t odid = old_manager->observation_domain_id; data_manager_close(&old_manager); tm_remove_all_odid_templates(template_mgr, odid); }
/** * \brief Remove data manager from list, close it and free templates * * \param[in] output_manager Output Manager structure * \param[in] old_manager Data Manager to remove and close */ void output_manager_remove(struct output_manager_config *output_manager, struct data_manager_config *old_manager) { struct data_manager_config *aux_conf = output_manager->data_managers; if (aux_conf == old_manager) { output_manager->data_managers = old_manager->next; } while (aux_conf->next) { if (aux_conf->next == old_manager) { aux_conf->next = old_manager->next; if (output_manager->last == old_manager) { output_manager->last = aux_conf; } break; } else { aux_conf = aux_conf->next; } } if (output_manager->data_managers == NULL) { output_manager->last = NULL; } uint32_t odid = old_manager->observation_domain_id; data_manager_close(&old_manager); if (!output_manager->perman_odid_merge && output_manager->manager_mode != OM_SINGLE) { tm_remove_all_odid_templates(template_mgr, odid); } else { // Single manager -> remove all templates tm_remove_all_templates(template_mgr); } }