From: Maxim Uvarov <[email protected]>

example aborted on exit due to missing termination
path (exit terminated fd_server which signaled app
on the exit from main.)
https://bugs.linaro.org/show_bug.cgi?id=3024

Signed-off-by: Maxim Uvarov <[email protected]>
---
/** Email created from pull request 229 (muvarov:master_bug3024)
 ** https://github.com/Linaro/odp/pull/229
 ** Patch: https://github.com/Linaro/odp/pull/229.patch
 ** Base sha: b529f843814f70068de2090e02df632113afa800
 ** Merge commit sha: b5f6031413a826cccfaa4468b62e2f3e90a12fff
 **/
 example/traffic_mgmt/odp_traffic_mgmt.c | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/example/traffic_mgmt/odp_traffic_mgmt.c 
b/example/traffic_mgmt/odp_traffic_mgmt.c
index c83b61522..1f1102ddf 100644
--- a/example/traffic_mgmt/odp_traffic_mgmt.c
+++ b/example/traffic_mgmt/odp_traffic_mgmt.c
@@ -766,12 +766,13 @@ int main(int argc, char *argv[])
        rc = odp_init_global(&instance, &ODP_INIT_PARAMS, NULL);
        if (rc != 0) {
                printf("Error: odp_init_global() failed, rc = %d\n", rc);
-               abort();
+               return -1;
        }
+
        rc = odp_init_local(instance, ODP_THREAD_CONTROL);
        if (rc != 0) {
                printf("Error: odp_init_local() failed, rc = %d\n", rc);
-               abort();
+               return -1;
        }
 
        if (process_cmd_line_options(argc, argv) < 0)
@@ -793,5 +794,30 @@ int main(int argc, char *argv[])
               pkts_into_tm, pkts_from_tm);
 
        odp_tm_stats_print(odp_tm_test);
+
+       rc = odp_pool_destroy(odp_pool);
+       if (rc != 0) {
+               printf("Error: odp_pool_destroy() failed, rc = %d\n", rc);
+               return -1;
+       }
+
+       rc = odp_tm_destroy(odp_tm_test);
+       if (rc != 0) {
+               printf("Error: odp_tm_destroy() failed, rc = %d\n", rc);
+               return -1;
+       }
+
+       rc = odp_term_local();
+       if (rc != 0) {
+               printf("Error: odp_term_local() failed, rc = %d\n", rc);
+               return -1;
+       }
+
+       /* Trying to keep this example as simple as possible we avoid
+        * clean termination of TM queues. This will error on global
+        * termination code
+        */
+       (void)odp_term_global(instance);
+
        return 0;
 }

Reply via email to