mirror of
https://github.com/emqx/neuron.git
synced 2026-10-24 18:51:30 +08:00
Fix crash issue of registering adapter when exit neu_manager
This commit is contained in:
+19
-4
@@ -355,6 +355,10 @@ static bool match_name_reg_adapter(const void *key, const void *item)
|
||||
neu_adapter_t *adapter;
|
||||
|
||||
adapter = ((adapter_reg_entity_t *) item)->adapter;
|
||||
if (adapter == NULL) {
|
||||
log_warn("The adapter had been removed");
|
||||
return false;
|
||||
}
|
||||
return strcmp((const char *) key, neu_adapter_get_name(adapter)) == 0;
|
||||
}
|
||||
|
||||
@@ -503,6 +507,11 @@ static neu_err_code_e manager_reg_adapter(neu_manager_t * manager,
|
||||
neu_adapter_info_t adapter_info;
|
||||
plugin_reg_info_t plugin_reg_info;
|
||||
|
||||
nng_mtx_lock(manager->mtx);
|
||||
if (manager->state == MANAGER_STATE_NULL) {
|
||||
return NEU_ERR_ESTATE;
|
||||
}
|
||||
nng_mtx_unlock(manager->mtx);
|
||||
if (reg_param->plugin_id.id_val != 0) {
|
||||
rv = plugin_manager_get_reg_info(
|
||||
manager->plugin_manager, reg_param->plugin_id, &plugin_reg_info);
|
||||
@@ -516,8 +525,10 @@ static neu_err_code_e manager_reg_adapter(neu_manager_t * manager,
|
||||
}
|
||||
|
||||
adapter_reg_entity_t *same_reg_entity;
|
||||
nng_mtx_lock(manager->adapters_mtx);
|
||||
same_reg_entity = find_reg_adapter_by_name(&manager->reg_adapters,
|
||||
reg_param->adapter_name);
|
||||
nng_mtx_unlock(manager->adapters_mtx);
|
||||
if (same_reg_entity != NULL) {
|
||||
log_warn("A adapter with same name has already been registered");
|
||||
return NEU_ERR_NODE_EXIST;
|
||||
@@ -580,6 +591,7 @@ static int manager_unreg_adapter(neu_manager_t *manager, adapter_id_t id,
|
||||
vector_t * reg_adapters;
|
||||
adapter_reg_entity_t *reg_entity;
|
||||
manager_bind_info_t * bind_info;
|
||||
neu_adapter_t * adapter;
|
||||
|
||||
reg_adapters = &manager->reg_adapters;
|
||||
|
||||
@@ -604,17 +616,20 @@ static int manager_unreg_adapter(neu_manager_t *manager, adapter_id_t id,
|
||||
|
||||
nng_cv_free(reg_entity->cv);
|
||||
neu_datatag_mng_destroy(reg_entity->datatag_manager);
|
||||
if (reg_entity->adapter != NULL) {
|
||||
neu_adapter_destroy(reg_entity->adapter);
|
||||
}
|
||||
adapter = reg_entity->adapter;
|
||||
|
||||
nng_mtx_lock(manager->adapters_mtx);
|
||||
if (need_erase) {
|
||||
vector_erase(reg_adapters, index);
|
||||
} else {
|
||||
memset(reg_entity, 0, sizeof(adapter_reg_entity_t));
|
||||
}
|
||||
manager->is_adapters_freezed = false;
|
||||
nng_cv_wake(manager->adapters_cv);
|
||||
nng_mtx_unlock(manager->adapters_mtx);
|
||||
if (adapter != NULL) {
|
||||
neu_adapter_destroy(adapter);
|
||||
}
|
||||
|
||||
return NEU_ERR_SUCCESS;
|
||||
}
|
||||
@@ -2372,4 +2387,4 @@ int neu_manager_adapter_validate_tag(neu_manager_t *manager,
|
||||
ret = neu_adapter_validate_tag(adapter, tags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user