diff --git a/src/core/manager.c b/src/core/manager.c index e98c196e..96c16271 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -83,6 +83,10 @@ neu_manager_t *neu_manager_create() nlog_warn("load plugin error"); } else { manager_load_node(manager); + while (neu_node_manager_exist_uninit(manager->node_manager)) { + usleep(1000 * 100); + } + manager_load_subscribe(manager); } diff --git a/src/core/node_manager.c b/src/core/node_manager.c index c576ce8b..3a1e6c60 100644 --- a/src/core/node_manager.c +++ b/src/core/node_manager.c @@ -113,6 +113,20 @@ uint16_t neu_node_manager_size(neu_node_manager_t *mgr) return HASH_COUNT(mgr->nodes); } +bool neu_node_manager_exist_uninit(neu_node_manager_t *mgr) +{ + node_entity_t *el = NULL, *tmp = NULL; + + HASH_ITER(hh, mgr->nodes, el, tmp) + { + if (el->pipe.id == 0) { + return true; + } + } + + return false; +} + UT_array *neu_node_manager_get(neu_node_manager_t *mgr, neu_node_type_e type) { UT_array * array = NULL; diff --git a/src/core/node_manager.h b/src/core/node_manager.h index c057c902..06180878 100644 --- a/src/core/node_manager.h +++ b/src/core/node_manager.h @@ -37,6 +37,7 @@ int neu_node_manager_add_static(neu_node_manager_t *mgr, neu_adapter_t * adapter); int neu_node_manager_update(neu_node_manager_t *mgr, const char *name, nng_pipe pipe); +bool neu_node_manager_exist_uninit(neu_node_manager_t *mgr); void neu_node_manager_del(neu_node_manager_t *mgr, const char *name); uint16_t neu_node_manager_size(neu_node_manager_t *mgr);