static inline lagopus_result_t bridgeq_mgr_map_to_array(void) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; if (bridgeq_table != NULL) { bridgeq_mgr_lock(); n_bridgeqs = 0; if (lagopus_hashmap_size(&bridgeq_table) != 0) { /* NOTE: * hashmap_iterate() is very slow. */ ret = lagopus_hashmap_iterate(&bridgeq_table, iter_to_array, NULL); } else { ret = LAGOPUS_RESULT_OK; } bridgeq_mgr_unlock(); } else { ret = LAGOPUS_RESULT_INVALID_OBJECT; lagopus_msg_warning("bridgeq_table is NULL.\n"); } return ret; }
static inline lagopus_result_t s_config_list(testobj_config_t ***list) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; if (list != NULL) { size_t n = (size_t)lagopus_hashmap_size(&s_tbl); *list = NULL; if (n > 0) { testobj_config_t **configs = (testobj_config_t **) malloc(sizeof(testobj_config_t *) * n); if (configs != NULL) { testobj_config_iter_ctx_t ctx; ctx.m_configs = configs; ctx.m_n_configs = 0; ctx.m_max = n; ret = lagopus_hashmap_iterate(&s_tbl, s_config_iterate, (void *)&ctx); if (ret == LAGOPUS_RESULT_OK) { *list = configs; ret = (ssize_t)n; } else { free((void *)configs); } } else { ret = LAGOPUS_RESULT_NO_MEMORY; } } else { ret = LAGOPUS_RESULT_OK; } } else { ret = LAGOPUS_RESULT_INVALID_ARGS; } return ret; }