X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvcl%2Fvppcom.c;h=33e0c197186438d317ffa4dec54caf1218152dd7;hb=ce815deb72fd3941b000aecec931131afc9d6c34;hp=1591b0850a0f70bc98defe3fbf87ea410585e79a;hpb=6f5b72ec0189377951b39a2ae2e4749951ec6730;p=vpp.git diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 1591b0850a0..33e0c197186 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -1211,35 +1211,34 @@ vppcom_app_create (char *app_name) void vppcom_app_destroy (void) { - int rv; - f64 orig_app_timeout; + struct dlmallinfo mi; + vcl_worker_t *wrk; + mspace heap; if (!pool_elts (vcm->workers)) return; vcl_evt (VCL_EVT_DETACH, vcm); - if (pool_elts (vcm->workers) == 1) - { - vcl_send_app_detach (vcl_worker_get_current ()); - orig_app_timeout = vcm->cfg.app_timeout; - vcm->cfg.app_timeout = 2.0; - rv = vcl_wait_for_app_state_change (STATE_APP_ENABLED); - vcm->cfg.app_timeout = orig_app_timeout; - if (PREDICT_FALSE (rv)) - VDBG (0, "application detach timed out! returning %d (%s)", rv, - vppcom_retval_str (rv)); - vec_free (vcm->app_name); - vcl_worker_cleanup (vcl_worker_get_current (), 0 /* notify vpp */ ); - } - else - { - vcl_worker_cleanup (vcl_worker_get_current (), 1 /* notify vpp */ ); - } + vcl_send_app_detach (vcl_worker_get_current ()); + + /* *INDENT-OFF* */ + pool_foreach (wrk, vcm->workers, ({ + vcl_worker_cleanup (wrk, 0 /* notify vpp */ ); + })); + /* *INDENT-ON* */ - vcl_set_worker_index (~0); vcl_elog_stop (vcm); vl_client_disconnect_from_vlib (); + + /* + * Free the heap and fix vcm + */ + heap = clib_mem_get_heap (); + mi = mspace_mallinfo (heap); + munmap (mspace_least_addr (heap), mi.arena); + + vcm = &_vppcom_main; } int