Has anyone run the Meeting SDK through valgrind? I’ve got a pretty simple app that creates a connection between our product and a Zoom meeting. It crashed yesterday with a “double-free” exception so I ran it through valgrind. Of course since I don’t have unstripped libraries there are no symbols. One thing that valgrind did reveal is that my app is being respawned something like 22 times before it finally settles down and there are only 2 instances of it running. Then the second instance exits after a while. I know this because I can see in my logfile valgrind starting up and shutting down 22 times, and I can see the processes being created, including valgrind, over and over again.
There were so many incidents logged it’s hard to know even where to start, but I’ll show a few here. These are just the first couple and the last few errors detected by valgrind for what looks like the first time my app is respawned:
==53925== Memcheck, a memory error detector
==53925== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==53925== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==53925== Command: ./zoom-bridge
==53925== Parent PID: 2585
==53925==
==53925== Conditional jump or move depends on uninitialised value(s)
==53925== at 0x484ED88: __strlen_sse2 (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==53925== by 0xA1F3D6D: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==53925== by 0x82B3F2C: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==53925== Uninitialised value was created by a heap allocation
==53925== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==53925== by 0xA1E4061: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==53925== by 0x82B170C: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==53925==
==53925== Conditional jump or move depends on uninitialised value(s)
==53925== at 0x7779FD5: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==53925== by 0x777EE70: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==53925== Uninitialised value was created by a heap allocation
...
==54290== 47,700 bytes in 144 blocks are indirectly lost in loss record 20,208 of 20,259
==54290== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0xAF0C120: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290== by 0xB028B33: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 50,136 bytes in 2,089 blocks are indirectly lost in loss record 20,215 of 20,259
==54290== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0xAF0C120: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290== by 0xAF0C228: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 55,296 bytes in 144 blocks are indirectly lost in loss record 20,218 of 20,259
==54290== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0xAF0C120: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290== by 0xAF0C228: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 71,900 bytes in 136 blocks are indirectly lost in loss record 20,222 of 20,259
==54290== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0x12B8D8AC: void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) (in /opt/zoom-bridge/3rd_party/zoom-sdk/qt_libs/Qt/lib/libQt5Qml.so.5)
==54290== by 0x12B8D90E: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /opt/zoom-bridge/3rd_party/zoom-sdk/qt_libs/Qt/lib/libQt5Qml.so.5)
==54290== by 0xACE17FE: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 72,701 bytes in 137 blocks are indirectly lost in loss record 20,223 of 20,259
==54290== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0x12B8D8AC: void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) (in /opt/zoom-bridge/3rd_party/zoom-sdk/qt_libs/Qt/lib/libQt5Qml.so.5)
==54290== by 0x12B8D90E: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /opt/zoom-bridge/3rd_party/zoom-sdk/qt_libs/Qt/lib/libQt5Qml.so.5)
==54290== by 0xACE180B: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 79,544 bytes in 61 blocks are possibly lost in loss record 20,225 of 20,259
==54290== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0xBC97E94: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290== by 0xBCEE3BF: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 87,176 bytes in 418 blocks are indirectly lost in loss record 20,226 of 20,259
==54290== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0xAF0C120: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290== by 0xAF0C228: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 103,015 bytes in 143 blocks are indirectly lost in loss record 20,229 of 20,259
==54290== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0xAF0C120: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290== by 0xAE7A5F7: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 114,932 (2,056 direct, 112,876 indirect) bytes in 1 blocks are definitely lost in loss record 20,230 of 20,259
==54290== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0xACE2D24: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290== by 0xACE56B5: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 143,533 bytes in 136 blocks are indirectly lost in loss record 20,235 of 20,259
==54290== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0x12B8D8AC: void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) (in /opt/zoom-bridge/3rd_party/zoom-sdk/qt_libs/Qt/lib/libQt5Qml.so.5)
==54290== by 0x12B8D90E: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /opt/zoom-bridge/3rd_party/zoom-sdk/qt_libs/Qt/lib/libQt5Qml.so.5)
==54290== by 0xACE2738: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 203,889 bytes in 137 blocks are indirectly lost in loss record 20,237 of 20,259
==54290== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0x12B8D8AC: void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) (in /opt/zoom-bridge/3rd_party/zoom-sdk/qt_libs/Qt/lib/libQt5Qml.so.5)
==54290== by 0x12B8D90E: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /opt/zoom-bridge/3rd_party/zoom-sdk/qt_libs/Qt/lib/libQt5Qml.so.5)
==54290== by 0xACE26C1: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290== by 0xACE2A14: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== 1,951,181 (311,296 direct, 1,639,885 indirect) bytes in 1 blocks are definitely lost in loss record 20,257 of 20,259
==54290== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==54290== by 0xACE5F30: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290== by 0xACE3685: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==54290==
==54290== LEAK SUMMARY:
==54290== definitely lost: 358,120 bytes in 128 blocks
==54290== indirectly lost: 1,787,450 bytes in 23,579 blocks
==54290== possibly lost: 91,161 bytes in 140 blocks
==54290== still reachable: 31,392,331 bytes in 37,943 blocks
==54290== of which reachable via heuristic:
==54290== length64 : 754,696 bytes in 1,368 blocks
==54290== newarray : 496 bytes in 2 blocks
==54290== multipleinheritance: 10,288 bytes in 38 blocks
==54290== suppressed: 0 bytes in 0 blocks
==54290== Reachable blocks (those to which a pointer was found) are not shown.
==54290== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==54290==
==54290== For lists of detected and suppressed errors, rerun with: -s
==54290== ERROR SUMMARY: 157 errors from 157 contexts (suppressed: 0 from 0)
==54291==
==54291== HEAP SUMMARY:
==54291== in use at exit: 33,895,768 bytes in 65,038 blocks
==54291== total heap usage: 508,050 allocs, 443,012 frees, 97,908,928 bytes allocated
==54291==
This is where my app crashed trying to invoke a pure virtual member function on an object:
==142196==
==142196== Process terminating with default action of signal 6 (SIGABRT)
==142196== at 0x118B19FC: __pthread_kill_implementation (pthread_kill.c:44)
==142196== by 0x118B19FC: __pthread_kill_internal (pthread_kill.c:78)
==142196== by 0x118B19FC: pthread_kill@@GLIBC_2.34 (pthread_kill.c:89)
==142196== by 0x1185D475: raise (raise.c:26)
==142196== by 0x118437F2: abort (abort.c:79)
==142196== by 0x115AAB9D: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30)
==142196== by 0x115B620B: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30)
==142196== by 0x115B6276: std::terminate() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30)
==142196== by 0x115B6FA4: __cxa_pure_virtual (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30)
==142196== by 0x9DF4343: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==142196== by 0x9DDFCF6: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==142196== by 0x9CF5C5A: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==142196== by 0x9D00848: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
==142196== by 0x5E8DB8A: ??? (in /opt/zoom-bridge/3rd_party/zoom-sdk/libmeetingsdk.so)
...
==142196== LEAK SUMMARY:
==142196== definitely lost: 5,007 bytes in 32 blocks
==142196== indirectly lost: 17,064 bytes in 11 blocks
==142196== possibly lost: 305,162 bytes in 6,022 blocks
==142196== still reachable: 40,921,551 bytes in 76,935 blocks
==142196== of which reachable via heuristic:
==142196== length64 : 752,984 bytes in 1,344 blocks
==142196== newarray : 496 bytes in 2 blocks
==142196== multipleinheritance: 13,712 bytes in 59 blocks
==142196== suppressed: 0 bytes in 0 blocks
==142196== Reachable blocks (those to which a pointer was found) are not shown.
==142196== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==142196==
==142196== For lists of detected and suppressed errors, rerun with: -s
==142196== ERROR SUMMARY: 377 errors from 273 contexts (suppressed: 0 from 0)