https://bugs.dpdk.org/show_bug.cgi?id=1290

            Bug ID: 1290
           Summary: rte_exit will hang if called from worker or service
                    thread
           Product: DPDK
           Version: 23.07
          Hardware: All
                OS: All
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: core
          Assignee: dev@dpdk.org
          Reporter: step...@networkplumber.org
  Target Milestone: ---

Calling rte_exit in a thread other than main thread won't work because
the cleanup code is calling rte_eal_cleanup, and inside that it ends
up waiting for all workers.  Since the thread you are calling from
is a worker, it ends up waiting for itself.

rte_exit()
        rte_eal_cleanup()
                rte_service_finalize()
                        rte_eal_mp_wait_lcore()


void
rte_eal_mp_wait_lcore(void)
{
        unsigned lcore_id;

        RTE_LCORE_FOREACH_WORKER(lcore_id) {
                rte_eal_wait_lcore(lcore_id);
        }
}

Either service handling needs to be smarter, the rte_exit() function
check if it is called from main lcore, and/or documentation needs update.
Not a simple fix because in order to safely do the cleanup logic
all threads have to gone to a quiescent state.

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to