Trying to dump ULTs stacks by calling ABT_info_trigger_print_all_thread_stacks() in DAOS code, I have found that this can only be done one time in a same process/execution context.
The reason of such buggy behaviour is that, in ABTI_info_check_print_all_thread_stacks(), a NULL/0 test of the return value of the ABTD_atomic_fetch_sub_int() function, basically doing an atomic_fetch_sub(), applied to the print_stack_barrier atomic variable where the number of previously "parked" XStreams (to stop all ABT-related activity during execution of all ULTs stacks dump in the context of an elected “master” XStream) is used to detect when the print_stack_flag can be reset to PRINT_STACK_FLAG_UNSET to allow for a next dump to be started.
The problem is that 1 should be tested instead of 0, since the atomic_fetch_sub() returned value is the one BEFORE the sub not after !
Trying to dump ULTs stacks by calling
ABT_info_trigger_print_all_thread_stacks()in DAOS code, I have found that this can only be done one time in a same process/execution context.The reason of such buggy behaviour is that, in
ABTI_info_check_print_all_thread_stacks(), a NULL/0 test of the return value of theABTD_atomic_fetch_sub_int()function, basically doing anatomic_fetch_sub(), applied to theprint_stack_barrieratomic variable where the number of previously "parked" XStreams (to stop all ABT-related activity during execution of all ULTs stacks dump in the context of an elected “master” XStream) is used to detect when theprint_stack_flagcan be reset toPRINT_STACK_FLAG_UNSETto allow for a next dump to be started.The problem is that 1 should be tested instead of 0, since the
atomic_fetch_sub()returned value is the one BEFORE the sub not after !