Skip to content
This repository has been archived by the owner on Mar 8, 2023. It is now read-only.

Memory Leak when running sick_scan_caller #19

Open
ceezous opened this issue Apr 14, 2022 · 3 comments
Open

Memory Leak when running sick_scan_caller #19

ceezous opened this issue Apr 14, 2022 · 3 comments

Comments

@ceezous
Copy link

ceezous commented Apr 14, 2022

I tried running sick_scan_caller, and everything went fine.
But I noticed that the memory it cost went up and didn't seem to stop rising.
So I tried using Dr.Memory to detect memory leak, and the report shows that it does.
Report is shown in next chat box.
Btw, my device is sick tim 561, and the program was running on Windows10.
So how could we fix this?

@ceezous
Copy link
Author

ceezous commented Apr 14, 2022

Dr. Memory version 2.5.0 build 0 built on Oct 18 2021 03:10:43
Windows version: WinVer=105;Rel=2009;Build=19043;Edition=Enterprise
Dr. Memory results for pid 22352: "sick_generic_caller.exe"
Application cmdline: "./sick_generic_caller.exe ../../launch/sick_tim_5xx.launch hostname:=192.168.1.100"
Recorded 124 suppression(s) from default C:\Program Files (x86)\Dr. Memory\bin\suppress-default.txt

Error /#1: UNINITIALIZED READ: reading register cl
/# 0 sick_scan::SickScanCommonTcp::findFrameInReceiveBuffer [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_tcp.cpp:431]
/# 1 sick_scan::SickScanCommonTcp::readCallbackFunction [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_tcp.cpp:558]
/# 2 sick_scan::SickScanCommonTcp::readCallbackFunctionS [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_tcp.cpp:265]
/# 3 Tcp::readInputData [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\tcp\tcp.cpp:298]
/# 4 Tcp::readThreadFunction [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\tcp\tcp.cpp:208]
/# 5 SickThread<>::thread_entry [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\include\sick_scan\tcp\SickThread.hpp:96]
/# 6 wrapper_prerun [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\tcp\SickThread.cpp:9]
/# 7 pthreadVC2.dll!pthread_timechange_handler_np +0x42e8 (0x5fd255e6 <pthreadVC2.dll+0x55e6>)
/# 8 MSVCR100.dll!_callthreadstartex [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c:314]
/# 9 MSVCR100.dll!_threadstartex [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c:292]
Note: @0:00:04.442 in thread 9412
Note: instruction: test %cl %cl

Error /#2: UNINITIALIZED READ: reading register al
/# 0 sick_scan::SickScanCommonTcp::processFrame [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_tcp.cpp:509]
/# 1 sick_scan::SickScanCommonTcp::readCallbackFunction [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_tcp.cpp:577]
/# 2 sick_scan::SickScanCommonTcp::readCallbackFunctionS [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_tcp.cpp:265]
/# 3 Tcp::readInputData [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\tcp\tcp.cpp:298]
/# 4 Tcp::readThreadFunction [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\tcp\tcp.cpp:208]
/# 5 SickThread<>::thread_entry [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\include\sick_scan\tcp\SickThread.hpp:96]
/# 6 wrapper_prerun [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\tcp\SickThread.cpp:9]
/# 7 pthreadVC2.dll!pthread_timechange_handler_np +0x42e8 (0x5fd255e6 <pthreadVC2.dll+0x55e6>)
/# 8 MSVCR100.dll!_callthreadstartex [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c:314]
/# 9 MSVCR100.dll!_threadstartex [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c:292]
Note: @0:00:04.451 in thread 9412
Note: instruction: test %al %al

Error /#3: UNINITIALIZED READ: reading 0x074c67f0-0x074c67f1 1 byte(s)
/# 0 sick_scan::SickScanCommon::loopOnce [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common.cpp:2931]
/# 1 mainGenericLaser [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_laser.cpp:400]
/# 2 main [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_caller.cpp:187]
Note: @0:00:13.829 in thread 21944
Note: instruction: cmp 0x000067c8(%edi) $0x01

Error /#4: UNINITIALIZED READ: reading 0x074c67b0-0x074c67b1 1 byte(s)
/# 0 sick_scan::SickScanCommon::loopOnce [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common.cpp:3708]
/# 1 mainGenericLaser [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_laser.cpp:400]
/# 2 main [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_caller.cpp:187]
Note: @0:00:13.867 in thread 21944
Note: instruction: cmp 0x00006788(%eax) $0x00

Error /#5: UNINITIALIZED READ: reading 0x074c6828-0x074c682c 4 byte(s)
/# 0 sick_scan::SickScanCommon::loopOnce [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common.cpp:3735]
/# 1 mainGenericLaser [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_laser.cpp:400]
/# 2 main [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_caller.cpp:187]
Note: @0:00:13.874 in thread 21944
Note: instruction: cmp 0x00006800(%edi) $0x00000000

Error /#6: LEAK 28 direct bytes 0x06cc00f8-0x06cc0114 + 0 indirect bytes
/# 0 replace_calloc [d:\a\drmemory\drmemory\common\alloc_replace.c:2620]
/# 1 pthreadVC2.dll!pthread_timechange_handler_np +0x154c (0x5fd2284a <pthreadVC2.dll+0x284a>)
/# 2 Mutex::Mutex [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\tcp\Mutex.cpp:40]
/# 3 SickScanCommonNw::SickScanCommonNw [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_nw.cpp:36]
/# 4 sick_scan::SickScanCommon::SickScanCommon [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common.cpp:347]
/# 5 sick_scan::SickScanCommonTcp::SickScanCommonTcp [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_tcp.cpp:211]
/# 6 mainGenericLaser [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_laser.cpp:362]
/# 7 main [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_caller.cpp:187]

Error /#7: LEAK 28 direct bytes 0x06cc0138-0x06cc0154 + 0 indirect bytes
/# 0 replace_calloc [d:\a\drmemory\drmemory\common\alloc_replace.c:2620]
/# 1 pthreadVC2.dll!pthread_timechange_handler_np +0x154c (0x5fd2284a <pthreadVC2.dll+0x284a>)
/# 2 Mutex::Mutex [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\tcp\Mutex.cpp:40]
/# 3 Tcp::Tcp [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\tcp\tcp.cpp:27]
/# 4 SickScanCommonNw::SickScanCommonNw [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_nw.cpp:36]
/# 5 sick_scan::SickScanCommon::SickScanCommon [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common.cpp:347]
/# 6 sick_scan::SickScanCommonTcp::SickScanCommonTcp [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_tcp.cpp:211]
/# 7 mainGenericLaser [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_laser.cpp:362]
/# 8 main [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_caller.cpp:187]

Error /#8: LEAK 28 direct bytes 0x06cc0178-0x06cc0194 + 0 indirect bytes
/# 0 replace_calloc [d:\a\drmemory\drmemory\common\alloc_replace.c:2620]
/# 1 pthreadVC2.dll!pthread_timechange_handler_np +0x154c (0x5fd2284a <pthreadVC2.dll+0x284a>)
/# 2 Mutex::Mutex [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\tcp\Mutex.cpp:40]
/# 3 sick_scan::SickScanCommonTcp::SickScanCommonTcp [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_scan_common_tcp.cpp:211]
/# 4 mainGenericLaser [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_laser.cpp:362]
/# 5 main [D:\3rd-party libraries\new_driver_for_SickTim561\sick_scan_base\driver\src\sick_generic_caller.cpp:187]

===========================================================================
FINAL SUMMARY:

DUPLICATE ERROR COUNTS:
Error /# 1: 802
Error /# 2: 802

SUPPRESSIONS USED:

ERRORS FOUND:
0 unique, 0 total unaddressable access(es)
5 unique, 1607 total uninitialized access(es)
0 unique, 0 total invalid heap argument(s)
0 unique, 0 total GDI usage error(s)
0 unique, 0 total handle leak(s)
0 unique, 0 total warning(s)
3 unique, 3 total, 84 byte(s) of leak(s)
0 unique, 0 total, 0 byte(s) of possible leak(s)
ERRORS IGNORED:
29 potential error(s) (suspected false positives)
(details: C:\Users\visionnav-182\AppData\Roaming\Dr. Memory\DrMemory-sick_generic_caller.exe.22352.000\potential_errors.txt)
7 potential leak(s) (suspected false positives)
(details: C:\Users\visionnav-182\AppData\Roaming\Dr. Memory\DrMemory-sick_generic_caller.exe.22352.000\potential_errors.txt)
145 unique, 263 total, 47059 byte(s) of still-reachable allocation(s)
(re-run with "-show_reachable" for details)
Details: C:\Users\visionnav-182\AppData\Roaming\Dr. Memory\DrMemory-sick_generic_caller.exe.22352.000\results.txt

@ceezous
Copy link
Author

ceezous commented Apr 19, 2022

I noticed that the memory leak was originated from pthreadw32, so does it seem to be necessary to deploy sick_scan_xd to prevent this problem?

rostest added a commit that referenced this issue Apr 19, 2022
@rostest
Copy link
Collaborator

rostest commented Apr 19, 2022

Thanks for reporting and analyzing this issue! The memory leak is caused by a missing pthread_mutex_destroy-call.
Please checkout the fix in branch https://github.com/SICKAG/sick_scan_base/tree/feature/memory-leak and rebuild.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

When branches are created from issues, their pull requests are automatically linked.

2 participants