mirror of
https://github.com/emqx/neuron.git
synced 2026-10-27 12:28:44 +08:00
Fix issue of crash in manager_bind_adapter
If we set manager to adapter in function neu_adapter_start, then the source code "adapter->manager = manager" sometimes running after get manager in function manager_bind_adapter. So we set manager to adapter in function neu_adapter_create.
This commit is contained in:
@@ -520,7 +520,8 @@ static const adapter_callbacks_t callback_funs = {
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info)
|
||||
neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info,
|
||||
neu_manager_t * manager)
|
||||
{
|
||||
neu_adapter_t *adapter;
|
||||
|
||||
@@ -545,6 +546,7 @@ neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info)
|
||||
adapter->new_req_id = 1;
|
||||
adapter->plugin_id = info->plugin_id;
|
||||
adapter->plugin_kind = info->plugin_kind;
|
||||
adapter->manager = manager;
|
||||
|
||||
adapter->plugin_lib_name = strdup(info->plugin_lib_name);
|
||||
if (adapter->name == NULL || adapter->plugin_lib_name == NULL) {
|
||||
@@ -626,7 +628,6 @@ int neu_adapter_start(neu_adapter_t *adapter, neu_manager_t *manager)
|
||||
intf_funs->init(adapter->plugin);
|
||||
}
|
||||
|
||||
adapter->manager = manager;
|
||||
nng_thread_create(&adapter->thrd, adapter_loop, adapter);
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -46,7 +46,8 @@ typedef struct neu_adapter_info {
|
||||
const char * plugin_lib_name;
|
||||
} neu_adapter_info_t;
|
||||
|
||||
neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info);
|
||||
neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info,
|
||||
neu_manager_t * manager);
|
||||
void neu_adapter_destroy(neu_adapter_t *adapter);
|
||||
int neu_adapter_start(neu_adapter_t *adapter, neu_manager_t *manager);
|
||||
int neu_adapter_stop(neu_adapter_t *adapter, neu_manager_t *manager);
|
||||
|
||||
@@ -491,7 +491,7 @@ static adapter_id_t manager_reg_adapter(neu_manager_t * manager,
|
||||
adapter_info.plugin_id = plugin_reg_info.plugin_id;
|
||||
adapter_info.plugin_kind = plugin_reg_info.plugin_kind;
|
||||
adapter_info.plugin_lib_name = plugin_reg_info.plugin_lib_name;
|
||||
adapter = neu_adapter_create(&adapter_info);
|
||||
adapter = neu_adapter_create(&adapter_info, manager);
|
||||
if (adapter == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user