From b250cca3776d66cfcfa2cbecc749826408e7fd76 Mon Sep 17 00:00:00 2001 From: Parker Liu Date: Fri, 20 Aug 2021 16:04:35 +0800 Subject: [PATCH] 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. --- src/adapter/adapter.c | 5 +++-- src/adapter/adapter_internal.h | 3 ++- src/core/neu_manager.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index c3809bc6..cb26c098 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -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; } diff --git a/src/adapter/adapter_internal.h b/src/adapter/adapter_internal.h index b4358a5b..0a898c8d 100644 --- a/src/adapter/adapter_internal.h +++ b/src/adapter/adapter_internal.h @@ -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); diff --git a/src/core/neu_manager.c b/src/core/neu_manager.c index 082a4697..82e0f3c5 100644 --- a/src/core/neu_manager.c +++ b/src/core/neu_manager.c @@ -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; }