Skip to content
This repository has been archived by the owner on Sep 27, 2020. It is now read-only.

Leak memory after close client #111

Open
k-morozov opened this issue Aug 12, 2020 · 0 comments
Open

Leak memory after close client #111

k-morozov opened this issue Aug 12, 2020 · 0 comments
Assignees
Labels
bug Something isn't working client
Projects

Comments

@k-morozov
Copy link
Owner

check valgrind + anitize=address

cmake:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address -fsanitize=leak")

==30273==ERROR: AddressSanitizer: heap-use-after-free on address 0x61100019a0a0 at pc 0x556246b1de26 bp 0x7ffc2f74a3c0 sp 0x7ffc2f74a3b0
READ of size 1 at 0x61100019a0a0 thread T0
    #0 0x556246b1de25 in boost::asio::detail::conditionally_enabled_mutex::scoped_lock::scoped_lock(boost::asio::detail::conditionally_enabled_mutex&) /usr/local/include/boost/asio/detail/conditionally_enabled_mutex.hpp:53
    #1 0x556246b1de25 in boost::asio::detail::scheduler::restart() /usr/local/include/boost/asio/detail/impl/scheduler.ipp:314
    #2 0x556246b1de25 in boost::asio::io_context::restart() /usr/local/include/boost/asio/impl/io_context.ipp:132
    #3 0x556246b1de25 in boost::asio::io_context::reset() /usr/local/include/boost/asio/impl/io_context.hpp:135
    #4 0x556246b1de25 in Client::close_connection() /home/focus/Workspace/Development/AppChat/src/client/client/client.cpp:5
    #5 0x556246b07b60 in Client::~Client() /home/focus/Workspace/Development/AppChat/src/client/client/client.h:72
    #6 0x556246b0a014 in std::unique_ptr<Client, std::default_delete<Client> >::~unique_ptr() /home/focus/Workspace/Development/AppChat/src/client/client/client.h:73
    #7 0x556246b0a014 in Control::~Control() /home/focus/Workspace/Development/AppChat/src/client/control/control.h:31
    #8 0x556246af9a3c in main /home/focus/Workspace/Development/AppChat/src/client/startup_client.cpp:13
    #9 0x7f9295eaab96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
    #10 0x556246afb719 in _start (/home/focus/Workspace/Development/AppChat/build/bin/debug/appchat-client+0x26719)

0x61100019a0a0 is located 96 bytes inside of 248-byte region [0x61100019a040,0x61100019a138)
freed by thread T14 here:
    #0 0x7f9298231407 in operator delete(void*, unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.6+0xb1407)
    #1 0x556246b7e03e in boost::asio::detail::scheduler::~scheduler() /usr/local/include/boost/asio/detail/impl/scheduler.ipp:142
    #2 0x556246b78d28 in boost::asio::detail::service_registry::destroy(boost::asio::execution_context::service*) /usr/local/include/boost/asio/detail/impl/service_registry.ipp:110
    #3 0x556246b78d28 in boost::asio::detail::service_registry::destroy_services() /usr/local/include/boost/asio/detail/impl/service_registry.ipp:54
    #4 0x556246b78d28 in boost::asio::execution_context::destroy() /usr/local/include/boost/asio/impl/execution_context.ipp:46
    #5 0x556246b78d28 in boost::asio::execution_context::~execution_context() /usr/local/include/boost/asio/impl/execution_context.ipp:35
    #6 0x556246b78d28 in boost::asio::io_context::~io_context() /usr/local/include/boost/asio/impl/io_context.ipp:56
    #7 0x556246b78d28 in Control::connect_to_server(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, TypeCommand) /home/focus/Workspace/Development/AppChat/src/client/control/control.cpp:27
    #8 0x556246b00bed in Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}::operator()() const /home/focus/Workspace/Development/AppChat/src/client/control/control.h:56
    #9 0x556246b00bed in void std::__invoke_impl<void, Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}>(std::__invoke_other, Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}&&) /usr/include/c++/10/bits/invoke.h:60
    #10 0x556246b00bed in std::__invoke_result<Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}>::type std::__invoke<Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}>(std::__invoke_result&&, (Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}&&)...) /usr/include/c++/10/bits/invoke.h:95
    #11 0x556246b00bed in void std::thread::_Invoker<std::tuple<Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/include/c++/10/thread:264
    #12 0x556246b00bed in std::thread::_Invoker<std::tuple<Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}> >::operator()() /usr/include/c++/10/thread:271
    #13 0x556246b00bed in std::thread::_State_impl<std::thread::_Invoker<std::tuple<Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}> > >::_M_run() /usr/include/c++/10/thread:215
    #14 0x7f9296562d7f  (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0xd0d7f)

previously allocated by thread T14 here:
    #0 0x7f92982303a7 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.6+0xb03a7)
    #1 0x556246b765ba in boost::asio::io_context::io_context() /usr/local/include/boost/asio/impl/io_context.ipp:39
    #2 0x556246b765ba in Control::connect_to_server(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, TypeCommand) /home/focus/Workspace/Development/AppChat/src/client/control/control.cpp:27
    #3 0x556246b00bed in Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}::operator()() const /home/focus/Workspace/Development/AppChat/src/client/control/control.h:56
    #4 0x556246b00bed in void std::__invoke_impl<void, Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}>(std::__invoke_other, Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}&&) /usr/include/c++/10/bits/invoke.h:60
    #5 0x556246b00bed in std::__invoke_result<Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}>::type std::__invoke<Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}>(std::__invoke_result&&, (Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}&&)...) /usr/include/c++/10/bits/invoke.h:95
    #6 0x556246b00bed in void std::thread::_Invoker<std::tuple<Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/include/c++/10/thread:264
    #7 0x556246b00bed in std::thread::_Invoker<std::tuple<Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}> >::operator()() /usr/include/c++/10/thread:271
    #8 0x556246b00bed in std::thread::_State_impl<std::thread::_Invoker<std::tuple<Control::autorisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#1}> > >::_M_run() /usr/include/c++/10/thread:215
    #9 0x7f9296562d7f  (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0xd0d7f)

Thread T14 created by T0 here:
    #0 0x7f92981d67c1 in pthread_create (/usr/lib/x86_64-linux-gnu/libasan.so.6+0x567c1)
    #1 0x7f9296563014 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0xd1014)
    #2 0x556246b7a63d in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, void, void (Control::*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>::call(void (Control::*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&), Control*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:136
    #3 0x556246b7a63d in void QtPrivate::FunctionPointer<void (Control::*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>::call<QtPrivate::List<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, void>(void (Control::*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&), Control*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:169
    #4 0x556246b7a63d in QtPrivate::QSlotObject<void (Control::*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&), QtPrivate::List<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:120
    #5 0x7f9296b1f66e in QMetaObject::activate(QObject*, int, int, void**) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2b966e)
    #6 0x556246afc207 in MainWindow::send_autorisation_info(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/focus/Workspace/Development/AppChat/build/src/client/appchat-client_autogen/DMHXEJ42XS/moc_mainwindow.cpp:212
    #7 0x556246b680db in MainWindow::on_push_autorisation_clicked() /home/focus/Workspace/Development/AppChat/src/client/gui/mainwindow.cpp:35
    #8 0x556246afca7c in MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) /home/focus/Workspace/Development/AppChat/build/src/client/appchat-client_autogen/DMHXEJ42XS/moc_mainwindow.cpp:131
    #9 0x556246b00511 in MainWindow::qt_metacall(QMetaObject::Call, int, void**) /home/focus/Workspace/Development/AppChat/build/src/client/appchat-client_autogen/DMHXEJ42XS/moc_mainwindow.cpp:198
    #10 0x7f9296b1f618 in QMetaObject::activate(QObject*, int, int, void**) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2b9618)
    #11 0x7f929795fba1 in QAbstractButton::clicked(bool) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x245ba1)

SUMMARY: AddressSanitizer: heap-use-after-free /usr/local/include/boost/asio/detail/conditionally_enabled_mutex.hpp:53 in boost::asio::detail::conditionally_enabled_mutex::scoped_lock::scoped_lock(boost::asio::detail::conditionally_enabled_mutex&)
Shadow bytes around the buggy address:
  0x0c228002b3c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c228002b3d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c228002b3e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c228002b3f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c228002b400: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
=>0x0c228002b410: fd fd fd fd[fd]fd fd fd fd fd fd fd fd fd fd fd
  0x0c228002b420: fd fd fd fd fd fd fd fa fa fa fa fa fa fa fa fa
  0x0c228002b430: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c228002b440: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fa
  0x0c228002b450: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x0c228002b460: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==30273==ABORTING

@k-morozov k-morozov added bug Something isn't working client labels Aug 12, 2020
@k-morozov k-morozov self-assigned this Aug 12, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working client
Projects
AppChat
Awaiting triage
Development

No branches or pull requests

1 participant