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:
Parker Liu
2021-08-20 16:04:35 +08:00
parent d9691c68d8
commit b250cca377
3 changed files with 6 additions and 4 deletions
+3 -2
View File
@@ -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;
}
+2 -1
View File
@@ -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);
+1 -1
View File
@@ -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;
}