Closed TanmayPatil105 closed 5 months ago
We don't handle memory well.
valgrind logs after running procfetch:
==93500== Memcheck, a memory error detector ==93500== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al. ==93500== Using Valgrind-3.22.0-bd4db67b1d-20231031 and LibVEX; rerun with -h for copyright info ==93500== Command: procfetch ==93500== --93500-- Valgrind options: --93500-- --leak-check=full --93500-- --show-leak-kinds=all --93500-- --track-origins=yes --93500-- --verbose --93500-- Contents of /proc/version: --93500-- Linux version 6.8.0-35-generic (buildd@lcy02-amd64-020) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #35-Ubuntu SMP PREEMPT_DYNAMIC Mon May 20 15:51:52 UTC 2024 --93500-- --93500-- Arch and hwcaps: AMD64, LittleEndian, amd64-cx16-lzcnt-rdtscp-sse3-ssse3-avx-avx2-bmi-f16c-rdrand-rdseed --93500-- Page sizes: currently 4096, max supported 4096 --93500-- Valgrind library directory: /usr/libexec/valgrind --93500-- Reading syms from /usr/bin/procfetch --93500-- Reading syms from /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 --93500-- Considering /usr/lib/debug/.build-id/3e/81740f816ee1521a87e439c16ebfde46f147a5.debug .. --93500-- .. build-id is valid --93500-- Reading syms from /usr/libexec/valgrind/memcheck-amd64-linux --93500-- object doesn't have a dynamic symbol table --93500-- Scheduler: using generic scheduler lock implementation. --93500-- Reading suppressions file: /usr/libexec/valgrind/default.supp ==93500== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-93500-by-tanmay-on-??? ==93500== embedded gdbserver: writing to /tmp/vgdb-pipe-to-vgdb-from-93500-by-tanmay-on-??? ==93500== embedded gdbserver: shared mem /tmp/vgdb-pipe-shared-mem-vgdb-93500-by-tanmay-on-??? ==93500== ==93500== TO CONTROL THIS PROCESS USING vgdb (which you probably ==93500== don't want to do, unless you know exactly what you're doing, ==93500== or are doing some strange experiment): ==93500== /usr/bin/vgdb --pid=93500 ...command... ==93500== ==93500== TO DEBUG THIS PROCESS USING GDB: start GDB like this ==93500== /path/to/gdb procfetch ==93500== and then give GDB the following command ==93500== target remote | /usr/bin/vgdb --pid=93500 ==93500== --pid is optional if only one valgrind process is running ==93500== --93500-- REDIR: 0x4028b00 (ld-linux-x86-64.so.2:strlen) redirected to 0x580c2e1a (???) --93500-- REDIR: 0x40272b0 (ld-linux-x86-64.so.2:index) redirected to 0x580c2e34 (???) --93500-- Reading syms from /usr/libexec/valgrind/vgpreload_core-amd64-linux.so --93500-- Reading syms from /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so ==93500== WARNING: new redirection conflicts with existing -- ignoring it --93500-- old: 0x04028b00 (strlen ) R-> (0000.0) 0x580c2e1a ??? --93500-- new: 0x04028b00 (strlen ) R-> (2007.0) 0x0484f340 strlen --93500-- REDIR: 0x40274e0 (ld-linux-x86-64.so.2:strcmp) redirected to 0x4850460 (strcmp) --93500-- REDIR: 0x4026910 (ld-linux-x86-64.so.2:mempcpy) redirected to 0x4853cd0 (mempcpy) --93500-- Reading syms from /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33 --93500-- Reading syms from /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 --93500-- Reading syms from /usr/lib/x86_64-linux-gnu/libc.so.6 --93500-- Considering /usr/lib/debug/.build-id/08/134323d00289185684a4cd177d202f39c2a5f3.debug .. --93500-- .. build-id is valid --93500-- Reading syms from /usr/lib/x86_64-linux-gnu/libm.so.6 --93500-- REDIR: 0x4028ca0 (ld-linux-x86-64.so.2:strncmp) redirected to 0x484fc90 (strncmp) --93500-- REDIR: 0x4bd2040 (libc.so.6:strnlen) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd20d0 (libc.so.6:strpbrk) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd0190 (libc.so.6:strcmp) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4be93b0 (libc.so.6:wcsnlen) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bcf280 (libc.so.6:memset) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4be8b20 (libc.so.6:wcslen) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4c543c0 (libc.so.6:__memcpy_chk) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bcf1f0 (libc.so.6:memrchr) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4be9350 (libc.so.6:wcsncpy) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bce710 (libc.so.6:memcpy@@GLIBC_2.14) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4be78e0 (libc.so.6:wcschr) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd0080 (libc.so.6:index) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd2100 (libc.so.6:rindex) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4be7990 (libc.so.6:wcscmp) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bcf4a0 (libc.so.6:stpncpy) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bf5eb0 (libc.so.6:wmemchr) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd1ee0 (libc.so.6:strncmp) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bcf500 (libc.so.6:strcasecmp) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd1300 (libc.so.6:strcspn) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4be88f0 (libc.so.6:wcscpy) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd0010 (libc.so.6:strcat) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd1de0 (libc.so.6:strncasecmp_l) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd0100 (libc.so.6:strchrnul) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bce620 (libc.so.6:bcmp) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd1290 (libc.so.6:strcpy) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bcf5a0 (libc.so.6:strcasecmp_l) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd1cb0 (libc.so.6:strlen) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd1f80 (libc.so.6:strncpy) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bf5f30 (libc.so.6:wmemcmp) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4c544e0 (libc.so.6:__memmove_chk) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) ==93500== WARNING: new redirection conflicts with existing -- ignoring it --93500-- old: 0x04ca59d0 (__memcpy_chk_avx_una) R-> (2030.0) 0x04853dd0 __memcpy_chk --93500-- new: 0x04ca59d0 (__memcpy_chk_avx_una) R-> (2024.0) 0x04853740 __memmove_chk --93500-- REDIR: 0x4bcf430 (libc.so.6:stpcpy) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bcefb0 (libc.so.6:memmove) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) ==93500== Preferring higher priority redirection: --93500-- old: 0x04ca5a00 (__memcpy_avx_unalign) R-> (2018.0) 0x04851580 __memcpy_avx_unaligned_erms --93500-- new: 0x04ca5a00 (__memcpy_avx_unalign) R-> (2018.1) 0x04852d60 memmove --93500-- REDIR: 0x4bce5a0 (libc.so.6:memchr) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd22d0 (libc.so.6:strspn) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bcf0d0 (libc.so.6:mempcpy) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4bd1d40 (libc.so.6:strncasecmp) redirected to 0x483d1c0 (_vgnU_ifunc_wrapper) --93500-- REDIR: 0x4caa5f0 (libc.so.6:__strrchr_avx2) redirected to 0x484ed20 (rindex) --93500-- REDIR: 0x4ca8740 (libc.so.6:__strlen_avx2) redirected to 0x484f220 (strlen) --93500-- REDIR: 0x4ca52a0 (libc.so.6:__memcmp_avx2_movbe) redirected to 0x4852480 (bcmp) --93500-- REDIR: 0x4ca9820 (libc.so.6:__strncmp_avx2) redirected to 0x484fab0 (strncmp) --93500-- REDIR: 0x4bca640 (libc.so.6:malloc) redirected to 0x48467b0 (malloc) --93500-- REDIR: 0x4ca5a00 (libc.so.6:__memcpy_avx_unaligned_erms) redirected to 0x4852d60 (memmove) --93500-- REDIR: 0x492e5c0 (libstdc++.so.6:operator new(unsigned long)) redirected to 0x4846f30 (operator new(unsigned long)) --93500-- REDIR: 0x4ca7b60 (libc.so.6:__strchr_avx2) redirected to 0x484ef00 (index) --93500-- REDIR: 0x492e620 (libstdc++.so.6:operator new[](unsigned long)) redirected to 0x4848550 (operator new[](unsigned long)) --93500-- REDIR: 0x4ca5000 (libc.so.6:__memchr_avx2) redirected to 0x48504e0 (memchr) --93500-- REDIR: 0x492c7c0 (libstdc++.so.6:operator delete(void*, unsigned long)) redirected to 0x484a530 (operator delete(void*, unsigned long)) --93500-- REDIR: 0x492c7e0 (libstdc++.so.6:operator delete[](void*)) redirected to 0x484bec0 (operator delete[](void*)) --93500-- REDIR: 0x4bcad20 (libc.so.6:free) redirected to 0x4849820 (free) --93500-- REDIR: 0x4ca59c0 (libc.so.6:__mempcpy_avx_unaligned_erms) redirected to 0x48538d0 (mempcpy) __ __ __ __ / / / // /_ __ __ ____ / /_ __ __ / / / // __ \ / / / // __ \ / __// / / / / /_/ // /_/ // /_/ // / / // /_ / /_/ / \____//_.___/ \__,_//_/ /_/ \__/ \__,_/ tanmay@tanmay-lenovo --93500-- REDIR: 0x4bcb090 (libc.so.6:realloc) redirected to 0x484db00 (realloc) OS : Ubuntu 24.04 LTS x86_64 Host : 81DE Lenovo ideapad 330-15IKB Kernel : 6.8.0-35-generic --93500-- REDIR: 0x4ca6400 (libc.so.6:__memset_avx2_unaligned_erms) redirected to 0x4852c50 (memset) UpTime : 9 hours, 44 mins RAM : 2972MiB / 7848MiB shell : fish DE : ubuntu:GNOME Resolution : 1366x768 Theme : Yaru-red-dark Icons : Yaru-red CPU : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz --93500-- REDIR: 0x4ca7da0 (libc.so.6:__strchrnul_avx2) redirected to 0x48537b0 (strchrnul) CPU Temperature : 44.5 °C GPU : Intel Corporation UHD Graphics 620 GPU : NVIDIA Corporation GP108M [GeForce MX150] --93500-- REDIR: 0x4bcb790 (libc.so.6:calloc) redirected to 0x484d8a0 (calloc) Packages : 2710 dpkg; 49 flatpak; 14 snap; ==93500== ==93500== HEAP SUMMARY: ==93500== in use at exit: 497,891 bytes in 12 blocks ==93500== total heap usage: 320 allocs, 308 frees, 1,232,857 bytes allocated ==93500== ==93500== Searching for pointers to 12 not-freed blocks ==93500== Checked 150,352 bytes ==93500== ==93500== 31 bytes in 1 blocks are indirectly lost in loss record 1 of 8 ==93500== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==93500== by 0x11EE60: std::__new_allocator<char>::allocate(unsigned long, void const*) (in /usr/bin/procfetch) ==93500== by 0x11BA4A: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_allocate(std::allocator<char>&, unsigned long) (in /usr/bin/procfetch) ==93500== by 0x11B951: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long) (in /usr/bin/procfetch) ==93500== by 0x122341: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (in /usr/bin/procfetch) ==93500== by 0x120951: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::push_back(char) (in /usr/bin/procfetch) ==93500== by 0x11E484: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) (in /usr/bin/procfetch) ==93500== by 0x11A499: Command::exec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/bin/procfetch) ==93500== by 0x10F7B8: getTheme[abi:cxx11]() (in /usr/bin/procfetch) ==93500== by 0x1270CF: DisplayInfo(bool) (in /usr/bin/procfetch) ==93500== by 0x1264E2: main (in /usr/bin/procfetch) ==93500== ==93500== 48 bytes in 1 blocks are definitely lost in loss record 2 of 8 ==93500== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==93500== by 0x11A1F1: Command::exec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/bin/procfetch) ==93500== by 0x10DF0D: getHardwarePlatform[abi:cxx11]() (in /usr/bin/procfetch) ==93500== by 0x126957: DisplayInfo(bool) (in /usr/bin/procfetch) ==93500== by 0x1264E2: main (in /usr/bin/procfetch) ==93500== ==93500== 48 bytes in 1 blocks are definitely lost in loss record 3 of 8 ==93500== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==93500== by 0x11A1F1: Command::exec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/bin/procfetch) ==93500== by 0x10F8C9: getIcons[abi:cxx11]() (in /usr/bin/procfetch) ==93500== by 0x127181: DisplayInfo(bool) (in /usr/bin/procfetch) ==93500== by 0x1264E2: main (in /usr/bin/procfetch) ==93500== ==93500== 79 (48 direct, 31 indirect) bytes in 1 blocks are definitely lost in loss record 4 of 8 ==93500== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==93500== by 0x11A1F1: Command::exec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/bin/procfetch) ==93500== by 0x10F7B8: getTheme[abi:cxx11]() (in /usr/bin/procfetch) ==93500== by 0x1270CF: DisplayInfo(bool) (in /usr/bin/procfetch) ==93500== by 0x1264E2: main (in /usr/bin/procfetch) ==93500== ==93500== 241 bytes in 1 blocks are indirectly lost in loss record 5 of 8 ==93500== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==93500== by 0x11EE60: std::__new_allocator<char>::allocate(unsigned long, void const*) (in /usr/bin/procfetch) ==93500== by 0x11BA4A: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_allocate(std::allocator<char>&, unsigned long) (in /usr/bin/procfetch) ==93500== by 0x11B951: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long) (in /usr/bin/procfetch) ==93500== by 0x122341: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (in /usr/bin/procfetch) ==93500== by 0x120951: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::push_back(char) (in /usr/bin/procfetch) ==93500== by 0x11E484: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) (in /usr/bin/procfetch) ==93500== by 0x11A499: Command::exec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/bin/procfetch) ==93500== by 0x10FE28: getGPU[abi:cxx11]() (in /usr/bin/procfetch) ==93500== by 0x1273FB: DisplayInfo(bool) (in /usr/bin/procfetch) ==93500== by 0x1264E2: main (in /usr/bin/procfetch) ==93500== ==93500== 289 (48 direct, 241 indirect) bytes in 1 blocks are definitely lost in loss record 6 of 8 ==93500== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==93500== by 0x11A1F1: Command::exec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/bin/procfetch) ==93500== by 0x10FE28: getGPU[abi:cxx11]() (in /usr/bin/procfetch) ==93500== by 0x1273FB: DisplayInfo(bool) (in /usr/bin/procfetch) ==93500== by 0x1264E2: main (in /usr/bin/procfetch) ==93500== ==93500== 497,283 bytes in 3 blocks are indirectly lost in loss record 7 of 8 ==93500== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==93500== by 0x11EE60: std::__new_allocator<char>::allocate(unsigned long, void const*) (in /usr/bin/procfetch) ==93500== by 0x11BA4A: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_allocate(std::allocator<char>&, unsigned long) (in /usr/bin/procfetch) ==93500== by 0x11B951: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long) (in /usr/bin/procfetch) ==93500== by 0x122341: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (in /usr/bin/procfetch) ==93500== by 0x120951: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::push_back(char) (in /usr/bin/procfetch) ==93500== by 0x11E484: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) (in /usr/bin/procfetch) ==93500== by 0x11A499: Command::exec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/bin/procfetch) ==93500== by 0x119E35: Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}::operator()() const (in /usr/bin/procfetch) ==93500== by 0x1261B7: void std::__invoke_impl<void, Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}>(std::__invoke_other, Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}&&) (in /usr/bin/procfetch) ==93500== by 0x126172: std::__invoke_result<Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}>::type std::__invoke<Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}>(Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}&&) (in /usr/bin/procfetch) ==93500== by 0x126113: void std::thread::_Invoker<std::tuple<Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (in /usr/bin/procfetch) ==93500== ==93500== 497,427 (144 direct, 497,283 indirect) bytes in 3 blocks are definitely lost in loss record 8 of 8 ==93500== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==93500== by 0x11A1F1: Command::exec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /usr/bin/procfetch) ==93500== by 0x119E35: Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}::operator()() const (in /usr/bin/procfetch) ==93500== by 0x1261B7: void std::__invoke_impl<void, Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}>(std::__invoke_other, Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}&&) (in /usr/bin/procfetch) ==93500== by 0x126172: std::__invoke_result<Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}>::type std::__invoke<Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}>(Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}&&) (in /usr/bin/procfetch) ==93500== by 0x126113: void std::thread::_Invoker<std::tuple<Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (in /usr/bin/procfetch) ==93500== by 0x1260E3: std::thread::_Invoker<std::tuple<Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}> >::operator()() (in /usr/bin/procfetch) ==93500== by 0x12600F: std::thread::_State_impl<std::thread::_Invoker<std::tuple<Command::exec_async(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (Command*)> const&)::{lambda()#1}> > >::_M_run() (in /usr/bin/procfetch) ==93500== by 0x495DBB3: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33) ==93500== by 0x4BB9A93: start_thread (pthread_create.c:447) ==93500== by 0x4C46A33: clone (clone.S:100) ==93500== ==93500== LEAK SUMMARY: ==93500== definitely lost: 336 bytes in 7 blocks ==93500== indirectly lost: 497,555 bytes in 5 blocks ==93500== possibly lost: 0 bytes in 0 blocks ==93500== still reachable: 0 bytes in 0 blocks ==93500== suppressed: 0 bytes in 0 blocks ==93500== ==93500== ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
We don't handle memory well.
Valgrind
valgrind logs after running procfetch: