audioscience / avdecc-lib

Simple C++ library for implementing IEEE1722.1 (AVB Device Enumeration, Discovery and Control)
MIT License
79 stars 45 forks source link

lib crashes during device discovery #383

Open uwekirst opened 7 years ago

uwekirst commented 7 years ago

I'm having an issue where the avdecc-lib crashes when an avb device is found. The last output in the console window says: [NOTIFICATION] (END_STATION_CONNECTED, .. Any ideas? thanks, uwe

ChildEBP RetAddr Args to Child 03a8f880 5f1990a2 e06d7363 00000001 00000003 KERNELBASE!RaiseException+0x62 (FPO: [4,22,0])
03a8f8d0 5f20f6a0 03a8f8e0 5f2399c0 5f1b8d14 VCRUNTIME140D!_CxxThrowException(void pExceptionObject = 0x03a8f8e0, struct _s__ThrowInfo pThrowInfo = 0x5f2399c0)+0xa2 (FPO: [Non-Fpo]) (CONV: stdcall) [f:\dd\vctools\crt\vcruntime\src\eh\throw.cpp @ 136] 03a8f8ec 5ef7c2cc 5efd8998 03a8fac0 010a4e68 MSVCP140D!std::_Xout_of_range(char _Message = 0x5efd8998 "invalid vector subscript")+0x20 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\stdcpp\xthrow.cpp @ 26] 03a8f900 5ef7c413 010a4e68 03a8f948 5ef760a1 avdecc_lib_controller32!std::vector<avdecc_lib::entity_descriptor_imp ,std::allocator<avdecc_lib::entity_descriptor_imp > >::_Xran(void)+0x1c (FPO: [Non-Fpo]) (CONV: thiscall) [c:\ewdk\enterprisewdk_rs1_release_14393_20160715-1616\program files\microsoft visual studio 14.0\vc \include\vector @ 1770]
03a8f90c 5ef760a1 00000000 03a8fa90 03a8fac0 avdecc_lib_controller32!std::vector<avdecc_lib::entity_descriptor_imp
,std::allocator<avdecc_lib::entity_descriptor_imp *> >::at(unsigned int _Pos = 0)+0x23 (FPO: [Non-Fpo]) (CONV: thiscall) [c:\ewdk\enterprisewdk_rs1_release_14393_20160715-1616\program files\microsoft visual studio 14.0\vc\include\vector @ 1210] 03a8f948 5ef621fd 00000007 03a8fb2c 01044ff8 avdecc_lib_controller32!avdecc_lib::end_station_imp::proc_rcvd_acmp_resp(unsigned int msg_type = 7, void notification_id = 0x03a8fb2c, unsigned char frame = 0x01044ff8 "???", unsigned int frame_len = 0x46, int status = 0x03a8fb00)+0x51 (FPO: [Non-Fpo]) (CONV: thiscall) [c:\projects\0ddk\avdecc-lib\controller\lib\src\end_station_imp.cpp @ 1837]
03a8fa9c 5efc4ab0 03a8fb2c 03a8fb0f 01044ff8 avdecc_lib_controller32!avdecc_lib::controller_imp::rx_packet_event(void
notification_id = 0x03a8fb2c, bool is_notification_id_valid = 0x03a8fb0f, unsigned char frame = 0x01044ff8 "???", unsigned int frame_len = 0x46, int status = 0x03a8fb00, unsigned short operation_id = 0x03a8faf4, bool is_operation_id_valid = 0x03a8faeb)+0x76d (FPO: [Non-Fpo]) (CONV: thiscall) [c:\projects\0ddk\avdecc-lib\controller\lib\src\controller_imp.cpp @ 564]
03a8fb3c 5efc49cc 5ef2213f 00000000 05725b58 avdecc_lib_controller32!avdecc_lib::system_layer2_multithreaded_callback::poll_single(void)+0xc0 (FPO: [Non-Fpo]) (CONV: thiscall) [c:\projects\0ddk\avdecc-lib\controller\lib\src\msvc\system_layer2_multithreaded_callback.cpp @ 307] 03a8fb50 5efc497b 03a8fb6c 74458744 05725b58 avdecc_lib_controller32!avdecc_lib::system_layer2_multithreaded_callback::proc_poll_thread_callback(void)+0x3c (FPO: [Non-Fpo]) (CONV: thiscall) [c:\projects\0ddk\avdecc-lib\controller\lib\src\msvc\system_layer2_multithreaded_callback.cpp @ 196] 03a8fb58 74458744 05725b58 74458720 68486308 avdecc_lib_controller32!avdecc_lib::system_layer2_multithreaded_callback::proc_poll_thread(void
lpParam = 0x05725b58)+0xb (FPO: [Non-Fpo]) (CONV: stdcall) [c:\projects\0ddk\avdecc-lib\controller\lib\src\msvc\system_layer2_multithreaded_callback.cpp @ 188]

andrew-elder commented 7 years ago

That's weird - not seeing that issue here. Are you able to share what end station is on the network?

uwekirst commented 7 years ago

No because it's still under development. The issue disappears if the end station does not connect to other avb endstations during powerup.

ahogen commented 6 years ago

We've seen this kind of error if the AEM isn't valid. (E.g. AEM stated there were 2 clock sources, but configuration only provided 1 clock source descriptor).

This crash didn't appear in the Linux cmdline app (not sure about Mac). @uwekirst, maybe try the Linux version, even if it's just in a VM, to see if you can discover your devices?

Or @andrew-elder , you may be able to replicate what we saw on an XMOS board by changing this line from 2 to 3, creating an invalid AEM.