diff options
Diffstat (limited to 'example/cli/odp_cli.c')
-rw-r--r-- | example/cli/odp_cli.c | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/example/cli/odp_cli.c b/example/cli/odp_cli.c index 597d01812..48badb5cd 100644 --- a/example/cli/odp_cli.c +++ b/example/cli/odp_cli.c @@ -96,6 +96,17 @@ static void my_cmd(int argc, char *argv[]) odph_cli_log("argv[%d]: %s\n", i, argv[i]); } +static int cli_server(void *arg ODP_UNUSED) +{ + /* Run CLI server. */ + if (odph_cli_run()) { + ODPH_ERR("odph_cli_run() failed.\n"); + exit(EXIT_FAILURE); + } + + return 0; +} + int main(int argc, char *argv[]) { signal(SIGINT, sig_handler); @@ -161,9 +172,30 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - /* Start CLI server. */ - if (odph_cli_start()) { - ODPH_ERR("CLI start failed.\n"); + /* Create server thread. */ + + odp_cpumask_t cpumask; + odph_thread_common_param_t thr_common; + odph_thread_param_t thr_param; + odph_thread_t thr_server; + + if (odp_cpumask_default_control(&cpumask, 1) != 1) { + ODPH_ERR("Failed to get default CPU mask.\n"); + exit(EXIT_FAILURE); + } + + odph_thread_common_param_init(&thr_common); + thr_common.instance = inst; + thr_common.cpumask = &cpumask; + + odph_thread_param_init(&thr_param); + thr_param.thr_type = ODP_THREAD_CONTROL; + thr_param.start = cli_server; + + memset(&thr_server, 0, sizeof(thr_server)); + + if (odph_thread_create(&thr_server, &thr_common, &thr_param, 1) != 1) { + ODPH_ERR("Failed to create server thread.\n"); exit(EXIT_FAILURE); } @@ -182,6 +214,12 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } + /* Wait for server thread to exit. */ + if (odph_thread_join(&thr_server, 1) != 1) { + ODPH_ERR("Failed to join server thread.\n"); + exit(EXIT_FAILURE); + } + /* Terminate CLI helper. */ if (odph_cli_term()) { ODPH_ERR("CLI helper termination failed.\n"); |