Deadlock in AudioWorkIntervalCreate

Sometimes when I call AudioWorkIntervalCreate the call hangs with the following stacktrace. The call is made on the main thread.

mach_msg2_trap 0x00007ff801f0b3ce
mach_msg2_internal 0x00007ff801f19d80
mach_msg_overwrite 0x00007ff801f12510
mach_msg 0x00007ff801f0b6bd
HALC_Object_AddPropertyListener 0x00007ff8049ea43e
HALC_ProxyObject::HALC_ProxyObject(unsigned int, unsigned int, unsigned int, unsigned int) 0x00007ff8047f97f2
HALC_ProxyObjectMap::_CreateObject(unsigned int, unsigned int, unsigned int, unsigned int) 0x00007ff80490f69c
HALC_ProxyObjectMap::CopyObjectByObjectID(unsigned int) 0x00007ff80490ecd6
HALC_ShellPlugIn::_ReconcileDeviceList(bool, bool, std::__1::vector<unsigned int, std::__1::allocator<unsigned int>>&, std::__1::vector<unsigned int, std::__1::allocator<unsigned int>>&) 0x00007ff8045d68cf
HALB_CommandGate::ExecuteCommand(void () block_pointer) const 0x00007ff80492ed14
HALC_ShellObject::ExecuteCommand(void () block_pointer) const 0x00007ff80470f554
HALC_ShellPlugIn::ReconcileDeviceList(bool, bool) 0x00007ff8045d6414
HALC_ShellPlugIn::ConnectToServer() 0x00007ff8045d74a4
HAL_HardwarePlugIn_InitializeWithObjectID(AudioHardwarePlugInInterface**, unsigned int) 0x00007ff8045da256
HALPlugInManagement::CreateHALPlugIn(HALCFPlugIn const*) 0x00007ff80442f828
HALSystem::InitializeDevices() 0x00007ff80442ebc3
HALSystem::CheckOutInstance() 0x00007ff80442b696
AudioObjectAddPropertyListener_mac_imp 0x00007ff80469b431
auoop::WorkgroupManager_macOS::WorkgroupManager_macOS() 0x00007ff8040fc3d5
auoop::gWorkgroupManager() 0x00007ff8040fc245
AudioWorkIntervalCreate 0x00007ff804034a33

In the scenario where I am seeing this have multiple programs that are started at the same time, and each of them is calling AudioWorkIntervalCreate. When the deadlock appears I can see multiple programs being stuck with the same stacktrace. If I kill one of them, many of the remaining ones gets out of the deadlock, so I am guessing that this is some kind of deadlock inbetween the multiple apps.

All of the programs use that same name for the workgroup as in: AudioWorkIntervalCreate("myWorkGroup", os_clockid_t::OS_CLOCK_MACH_ABSOLUTE_TIME, nullptr);

Does this name need to be system wide unique?

Hi, in order to assist you we would like to see a spindump when in this state , probably best of all processes that are deadocked as well as coreaudiod. You can do this via the command line or Activity Monitor. Please attach it (rather than paste it as text here). Also please beware of any personal or confidential information in there. Should you feel more comfortable doing so you can also file a Feedback Assistant ticket for this.

Deadlock in AudioWorkIntervalCreate
 
 
Q