Hi
In my AudioServerPlugin, I use the RequestDeviceConfigurationChange/PerformDeviceConfigurationChange mechanism. I expect core audio to sequentially execute StopIO-PerformDeviceConfigurationChange-StartIO.
However, I often have problems with StartIO being issued too early, with bad side effects.
Example
8/02/2014 15:55:02,296 coreaudiod[511]: Send RequestDeviceConfigurationChange
28/02/2014 15:55:02,296 coreaudiod[511]: +StopIO 28/02/2014 15:55:02,422 coreaudiod[511]: -StopIO 28/02/2014 15:55:02,423 coreaudiod[511]: +PerformDeviceConfigurationChange 28/02/2014 15:55:03,179 coreaudiod[511]: - PerformDeviceConfigurationChange
28/02/2014 15:55:03,181 coreaudiod[511]: Send RequestDeviceConfigurationChange
28/02/2014 15:55:03,183 coreaudiod[511]: +StartIO 28/02/2014 15:55:03,214 coreaudiod[511]: -StartIO
28/02/2014 15:55:03,216 coreaudiod[511]: +StopIO 28/02/2014 15:55:03,221 coreaudiod[511]: -StopIO 28/02/2014 15:55:03,228 coreaudiod[511]: +PerformDeviceConfigurationChange 28/02/2014 15:55:03,228 coreaudiod[511]: +StartIO 28/02/2014 15:55:03,987 coreaudiod[511]: -PerformDeviceConfigurationChange 28/02/2014 15:55:04,013 coreaudiod[511]: -StartIO
In this example, the StartIO is issued in the same ms as the PerformDeviceConfigurationChange. A lock delays the StartIO, but coreaudiod crashes immediately after when this situation occurs, with this stack Exception Type: EXC_ARITHMETIC (SIGFPE) Exception Codes: EXC_I386_DIV (divide by zero) Thread 21 com.apple.audio.IOThread.server, Queue : (null) #0 0x000000010edb0587 in ___lldb_unnamed_function3114$$coreaudiod () #1 0x000000010edb512a in ___lldb_unnamed_function3322$$coreaudiod () #2 0x000000010ed940ec in ___lldb_unnamed_function2525$$coreaudiod () #3 0x000000010edb4eba in ___lldb_unnamed_function3319$$coreaudiod () #4 0x000000010ed93e9a in ___lldb_unnamed_function2522$$coreaudiod () #5 0x000000010edb4310 in ___lldb_unnamed_function3279$$coreaudiod () #6 0x000000010ed17584 in ___lldb_unnamed_function18$$coreaudiod () #7 0x000000010edb42a8 in ___lldb_unnamed_function3278$$coreaudiod () #8 0x000000010ed3f86c in ___lldb_unnamed_function831$$coreaudiod () #9 0x000000010ed437fc in ___lldb_unnamed_function897$$coreaudiod () #10 0x000000010ed3f01c in ___lldb_unnamed_function824$$coreaudiod () #11 0x000000010ed3e941 in ___lldb_unnamed_function817$$coreaudiod () #12 0x000000010ed3c230 in ___lldb_unnamed_function778$$coreaudiod () #13 0x000000010ed3c15f in ___lldb_unnamed_function777$$coreaudiod () #14 0x000000010ed1ebc9 in ___lldb_unnamed_function112$$coreaudiod () #15 0x00007fff8a199899 in _pthread_body () #16 0x00007fff8a19972a in _pthread_start () #17 0x00007fff8a19dfc9 in thread_start ()
Is this a normal behavior? Is there a way to know exactly what causes this crash?
Thanks in advance Eric Gorouben |