Skip to content
This repository has been archived by the owner on Jun 9, 2019. It is now read-only.

Commit

Permalink
Add test in which close is delayed
Browse files Browse the repository at this point in the history
With this commit, we have the following use after free errors:

$ valgrind ./src/callbacks
==15367== Memcheck, a memory error detector
==15367== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==15367== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==15367== Command: ./src/callbacks
==15367==
==15367== Invalid write of size 8
==15367==    at 0x40461A: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f060 is 32 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367== Invalid read of size 8
==15367==    at 0x404644: std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404550: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f090 is 80 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367== Invalid read of size 8
==15367==    at 0x404672: std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404550: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f090 is 80 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367== Invalid write of size 8
==15367==    at 0x40469A: std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404550: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f090 is 80 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367== Invalid read of size 8
==15367==    at 0x4045C4: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40456E: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f0c0 is 128 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367== Invalid read of size 8
==15367==    at 0x4045F2: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40456E: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f0c0 is 128 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367== Invalid write of size 8
==15367==    at 0x40461A: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40456E: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f0c0 is 128 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367== Invalid read of size 8
==15367==    at 0x4046C4: std::__1::function<void (int)>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40458C: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f0f0 is 176 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367== Invalid read of size 8
==15367==    at 0x4046F2: std::__1::function<void (int)>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40458C: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f0f0 is 176 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367== Invalid write of size 8
==15367==    at 0x40471A: std::__1::function<void (int)>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40458C: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f0f0 is 176 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367== Invalid write of size 4
==15367==    at 0x404591: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40272B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::operator()() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4041F2: std::__1::function<void ()>::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404154: cxx_experiments::Transport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40295D: MyTransport::emit_connect() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401816: main (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==  Address 0x5e3f100 is 192 bytes inside a block of size 208 free'd
==15367==    at 0x4C2BE10: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15367==    by 0x405473: std::__1::__shared_ptr_pointer<MyTransport*, std::__1::default_delete<MyTransport>, std::__1::allocator<MyTransport> >::__on_zero_shared() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4EFE8A2: std::__1::__shared_weak_count::__release_shared() (in /usr/lib/x86_64-linux-gnu/libc++.so.1.0)
==15367==    by 0x4044FE: std::__1::shared_ptr<MyTransport>::~shared_ptr() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4044C4: cxx_experiments::Pointer<MyTransport>::~Pointer() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x401BA4: create_transport()::$_0::~$_0() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402844: std::__1::__libcpp_compressed_pair_imp<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, 2u>::~__libcpp_compressed_pair_imp() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x402824: std::__1::__compressed_pair<create_transport()::$_0, std::__1::allocator<create_transport()::$_0> >::~__compressed_pair() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x40265B: std::__1::__function::__func<create_transport()::$_0, std::__1::allocator<create_transport()::$_0>, void ()>::destroy() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4045E8: std::__1::function<void ()>::operator=(decltype(nullptr)) (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x404532: cxx_experiments::Transport::close() (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==    by 0x4027FC: create_transport()::$_0::operator()() const (in /home/sbasso/src/cxx-experiments/src/callbacks)
==15367==
==15367==
==15367== HEAP SUMMARY:
==15367==     in use at exit: 0 bytes in 0 blocks
==15367==   total heap usage: 2 allocs, 2 frees, 240 bytes allocated
==15367==
==15367== All heap blocks were freed -- no leaks are possible
==15367==
==15367== For counts of detected and suppressed errors, rerun with: -v
==15367== ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)
  • Loading branch information
bassosimone committed Mar 18, 2015
1 parent 090fc5e commit b2a4d3a
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions src/callbacks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,16 @@ class MyTransport : public Transport {
}
};

static void create_transport() {
static MyTransport *create_transport() {
auto transport = make<MyTransport>(12345);
transport->on_connect([transport]() {
transport->close();
});
transport->emit_connect();
return transport.get();
}

int main() { create_transport(); }
int main() {
auto pointer = create_transport();
std::cout << "Returned\n";
pointer->emit_connect();
}

2 comments on commit b2a4d3a

@hellais
Copy link

@hellais hellais commented on b2a4d3a Apr 3, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a pretty long commit message ;)

@bassosimone
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, lol, I could have replaced the entire thing with $valgrind pornography$!

Please sign in to comment.