10.6: Changing auhal hog mode tiggers callbacks for available physical formats
Update:
Current code produces a segfault on 10.6 when switching to SPDIF mode, because of deadlock.
But even after the deadlock situation is resolved in the code, we end up in an infinite loop, because setting the hog mode on spidf startup triggers the streams changed callback, which in turn restarts the audio output.
Problematic line is auhal.c:827:
err = AudioObjectSetPropertyData(p_sys->i_selected_dev, &audioDeviceHogModeAddress, 0, NULL, i_param_size, &p_sys->i_hog_pid);
resulting in backtrace:
[#0](https://code.videolan.org/videolan/vlc/-/issues/0) StreamsChangedListener (inObjectID=269, inNumberAddresses=1, inAddresses=0x103eba340, inClientData=0x10028dd00) at ../../../extras/package/macosx/../../../modules/audio_output/auhal.c:1528
[#1](https://code.videolan.org/videolan/vlc/-/issues/1) 0x00007fff8723bcd0 in HALObject::PropertiesChanged ()
[#2](https://code.videolan.org/videolan/vlc/-/issues/2) 0x00007fff87248d20 in AudioObjectPropertiesChanged ()
[#3](https://code.videolan.org/videolan/vlc/-/issues/3) 0x00007fff87248b9e in HP_Object::PropertiesChanged ()
[#4](https://code.videolan.org/videolan/vlc/-/issues/4) 0x00007fff87274196 in IOA_Stream::RefreshAvailablePhysicalFormats ()
[#5](https://code.videolan.org/videolan/vlc/-/issues/5) 0x00007fff87273887 in IOA_SingleDevice::RefreshAvailableStreamFormats ()
[#6](https://code.videolan.org/videolan/vlc/-/issues/6) 0x00007fff8727393e in IOA_SingleDevice::HogModeStateChanged ()
[#7](https://code.videolan.org/videolan/vlc/-/issues/7) 0x00007fff87260592 in HP_HogMode::Take ()
[#8](https://code.videolan.org/videolan/vlc/-/issues/8) 0x00007fff87240689 in IOA_SingleDevice::SetPropertyData ()
[#9](https://code.videolan.org/videolan/vlc/-/issues/9) 0x00007fff8724029a in HP_HardwarePlugIn_ObjectSetPropertyData ()
[#10](https://code.videolan.org/videolan/vlc/-/issues/10) 0x00007fff872400c3 in HALPlugIn::ObjectSetPropertyData ()
[#11](https://code.videolan.org/videolan/vlc/-/issues/11) 0x00007fff872456f0 in HALObject::SetPropertyData ()
[#12](https://code.videolan.org/videolan/vlc/-/issues/12) 0x00007fff872455d4 in HALDevice::SetPropertyData ()
[#13](https://code.videolan.org/videolan/vlc/-/issues/13) 0x00007fff872500bd in AudioObjectSetPropertyData ()
[#14](https://code.videolan.org/videolan/vlc/-/issues/14) 0x0000000100761368 in StartSPDIF (p_aout=0x10028dd00, fmt=0x10028dee4) at ../../../extras/package/macosx/../../../modules/audio_output/auhal.c:827
[#15](https://code.videolan.org/videolan/vlc/-/issues/15) 0x00000001007602c9 in Start (p_aout=0x10028dd00, fmt=0x10028dee4) at ../../../extras/package/macosx/../../../modules/audio_output/auhal.c:371
[#16](https://code.videolan.org/videolan/vlc/-/issues/16) 0x00000001000c4872 in aout_OutputNew (aout=0x10028dd00, fmt=0x10028dee4) at ../../extras/package/macosx/../../../src/audio_output/output.c:368
[#17](https://code.videolan.org/videolan/vlc/-/issues/17) 0x00000001000c091c in aout_DecNew (p_aout=0x10028dd00, p_format=0x1193cebf0, p_replay_gain=0x10089c2ac, p_request_vout=0x1193cebd8) at ../../extras/package/macosx/../../../src/audio_output/dec.c:83
[#18](https://code.videolan.org/videolan/vlc/-/issues/18) 0x00000001000756ab in aout_update_format (p_dec=0x10089c0b0) at ../../extras/package/macosx/../../../src/input/decoder.c:2243
[#19](https://code.videolan.org/videolan/vlc/-/issues/19) 0x0000000100072d32 in decoder_UpdateAudioFormat (dec=0x10089c0b0) at vlc_codec.h:214
[#20](https://code.videolan.org/videolan/vlc/-/issues/20) 0x0000000100072c58 in decoder_NewAudioBuffer (dec=0x10089c0b0, samples=1536) at ../../extras/package/macosx/../../../src/input/decoder.c:209
[#21](https://code.videolan.org/videolan/vlc/-/issues/21) 0x0000000103f85f48 in GetAoutBuffer (p_dec=0x10089c0b0) at ../../../extras/package/macosx/../../../modules/codec/a52.c:385
[#22](https://code.videolan.org/videolan/vlc/-/issues/22) 0x0000000103f85a71 in GetOutBuffer (p_dec=0x10089c0b0, pp_out_buffer=0x1193ced90) at ../../../extras/package/macosx/../../../modules/codec/a52.c:370
[#23](https://code.videolan.org/videolan/vlc/-/issues/23) 0x0000000103f84e44 in DecodeBlock (p_dec=0x10089c0b0, pp_block=0x1193cee10) at ../../../extras/package/macosx/../../../modules/codec/a52.c:295
[#24](https://code.videolan.org/videolan/vlc/-/issues/24) 0x0000000100078829 in DecoderDecodeAudio (p_dec=0x10089c0b0, p_block=0x1008d6000) at ../../extras/package/macosx/../../../src/input/decoder.c:1269
[#25](https://code.videolan.org/videolan/vlc/-/issues/25) 0x0000000100077067 in DecoderProcessAudio (p_dec=0x10089c0b0, p_block=0x1008d6000, b_flush=false) at ../../extras/package/macosx/../../../src/input/decoder.c:1900
[#26](https://code.videolan.org/videolan/vlc/-/issues/26) 0x0000000100076aee in DecoderProcess (p_dec=0x10089c0b0, p_block=0x1008d6000) at ../../extras/package/macosx/../../../src/input/decoder.c:2021
[#27](https://code.videolan.org/videolan/vlc/-/issues/27) 0x00000001000768d1 in DecoderThread (p_data=0x10089c0b0) at ../../extras/package/macosx/../../../src/input/decoder.c:946
[#28](https://code.videolan.org/videolan/vlc/-/issues/28) 0x00007fff87f96fd6 in _pthread_start ()
[#29](https://code.videolan.org/videolan/vlc/-/issues/29) 0x00007fff87f96e89 in thread_start ()
Even if you comment out said line in startspdif code, the hog mode gets changed internally, and the same problem occurs.
Same when stopping the output.
Edited by David