Project

General

Profile

Bug #42890

Updated by Kefu Chai over 4 years ago

exit() will call pthread_cond_destroy attempting to destroy dpdk::eal::cond 
 upon which other threads are currently blocked results in undefine 
 behavior. Link different libc version test, libc-2.17 can exit, 
 libc-2.27 will deadlock, the call stack is as follows: 

 <pre> 
 Thread 3 (Thread 0xffff7e5749f0 (LWP 62213)): 
 #0    0x0000ffff7f3c422c in futex_wait_cancelable (private=<optimized out>, expected=0, 
     futex_word=0xaaaadc0e30f4 <dpdk::eal::cond+44>) at ../sysdeps/unix/sysv/linux/futex-internal.h:88 
 #1    __pthread_cond_wait_common (abstime=0x0, mutex=0xaaaadc0e30f8 <dpdk::eal::lock>, cond=0xaaaadc0e30c8 <dpdk::eal::cond>) 
     at pthread_cond_wait.c:502 
 #2    __pthread_cond_wait (cond=0xaaaadc0e30c8 <dpdk::eal::cond>, mutex=0xaaaadc0e30f8 <dpdk::eal::lock>) 
     at pthread_cond_wait.c:655 
 #3    0x0000ffff7f1f1f80 in std::condition_variable::wait(std::unique_lock<std::mutex>&) () 
    from /usr/lib/aarch64-linux-gnu/libstdc++.so.6 
 #4    0x0000aaaad37f5078 in dpdk::eal::<lambda()>::operator()(void) const (__closure=<optimized out>, __closure=<optimized out>) 
     at ./src/msg/async/dpdk/dpdk_rte.cc:136 
 #5    0x0000ffff7f1f7ed4 in ?? () from /usr/lib/aarch64-linux-gnu/libstdc++.so.6 
 #6    0x0000ffff7f3be088 in start_thread (arg=0xffffe73e197f) at pthread_create.c:463 
 #7    0x0000ffff7efc74ec in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78 

 Thread 1 (Thread 0xffff7ee3b010 (LWP 62200)): 
 #0    0x0000ffff7f3c3c38 in futex_wait (private=<optimized out>, expected=12, futex_word=0xaaaadc0e30ec <dpdk::eal::cond+36>) 
     at ../sysdeps/unix/sysv/linux/futex-internal.h:61 
 #1    futex_wait_simple (private=<optimized out>, expected=12, futex_word=0xaaaadc0e30ec <dpdk::eal::cond+36>) 
     at ../sysdeps/nptl/futex-internal.h:135 
 #2    __pthread_cond_destroy (cond=0xaaaadc0e30c8 <dpdk::eal::cond>) at pthread_cond_destroy.c:54 
 #3    0x0000ffff7ef2be34 in __run_exit_handlers (status=-6, listp=0xffff7f04a5a0 <__exit_funcs>, run_list_atexit=255, 
     run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at exit.c:108 
 #4    0x0000ffff7ef2bf6c in __GI_exit (status=<optimized out>) at exit.c:139 
 #5    0x0000ffff7ef176e4 in __libc_start_main (main=0x0, argc=0, argv=0x0, init=<optimized out>, fini=<optimized out>, 
     rtld_fini=<optimized out>, stack_end=<optimized out>) at ../csu/libc-start.c:344 
 #6    0x0000aaaad2939db0 in _start () at ./src/include/buffer.h:642 
 Backtrace stopped: previous frame identical to this frame (corrupt stack?) 
 </pre>

Back