valgrind errors at shutdown #1773

issue gavinandresen opened this issue on September 1, 2012
  1. gavinandresen commented at 8:48 PM on September 1, 2012: contributor

    Investigating the listtransactions crash, I ran across this unrelated bad-use-of-memory-on-shutdown issue.

    Looks like the new multithreaded RPC code has a bug.

    ==61723== Memcheck, a memory error detector
    ==61723== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
    ==61723== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
    ==61723== Command: bitcoind -datadir=/Users/gavin/ccut/1
    ==61723== 
    --61723-- run: /usr/bin/dsymutil "./bitcoind"
    ==61723== Thread 3:
    ==61723== Invalid read of size 4
    ==61723==    at 0x14757E: boost::asio::detail::reactive_socket_service_base::destroy(boost::asio::detail::reactive_socket_service_base::base_implementation_type&) (reactive_socket_service_base.ipp:87)
    ==61723==    by 0x1475F8: boost::asio::stream_socket_service<boost::asio::ip::tcp>::destroy(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&) (stream_socket_service.hpp:119)
    ==61723==    by 0x147620: boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_io_object() (basic_io_object.hpp:124)
    ==61723==    by 0x14763C: boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_socket() (basic_socket.hpp:1455)
    ==61723==    by 0x147658: boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_stream_socket() (basic_stream_socket.hpp:47)
    ==61723==    by 0x1477D9: boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >::~stream() (stream.hpp:114)
    ==61723==    by 0x147882: AcceptedConnectionImpl<boost::asio::ip::tcp>::~AcceptedConnectionImpl() (bitcoinrpc.cpp:2539)
    ==61723==    by 0x93F3B: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2879)
    ==61723==    by 0x93DE3: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2863)
    ==61723==    by 0x93DE3: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2863)
    ==61723==    by 0x93DE3: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2863)
    ==61723==    by 0x93DE3: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2863)
    ==61723==  Address 0x4c38c44 is 20 bytes inside a block of size 24 free'd
    ==61723==    at 0x120C477: operator delete(void*) (vg_replace_malloc.c:387)
    ==61723==    by 0xE2B4A: boost::asio::stream_socket_service<boost::asio::ip::tcp>::~stream_socket_service() (stream_socket_service.hpp:42)
    ==61723==    by 0xA4EA5: boost::asio::detail::service_registry::destroy(boost::asio::io_service::service*) (service_registry.ipp:101)
    ==61723==    by 0x119819: boost::asio::detail::service_registry::~service_registry() (service_registry.ipp:45)
    ==61723==    by 0x1198CC: boost::asio::io_service::~io_service() (io_service.ipp:53)
    ==61723==    by 0x8C83E: ThreadRPCServer2(void*) (bitcoinrpc.cpp:2782)
    ==61723==    by 0x8D5BB: ThreadRPCServer(void*) (bitcoinrpc.cpp:2584)
    ==61723==    by 0x8D571: ThreadRPCServer(void*) (bitcoinrpc.cpp:2576)
    ==61723==    by 0x8D571: ThreadRPCServer(void*) (bitcoinrpc.cpp:2576)
    ==61723==    by 0x8D571: ThreadRPCServer(void*) (bitcoinrpc.cpp:2576)
    ==61723==    by 0x8D571: ThreadRPCServer(void*) (bitcoinrpc.cpp:2576)
    ==61723==    by 0x1261258: _pthread_start (in /usr/lib/libSystem.B.dylib)
    ==61723== 
    ==61723== Invalid read of size 4
    ==61723==    at 0x1239474: pthread_mutex_lock (in /usr/lib/libSystem.B.dylib)
    ==61723==    by 0x11AE34: boost::asio::detail::posix_mutex::lock() (posix_mutex.hpp:52)
    ==61723==    by 0x11AE6C: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
    ==61723==    by 0x140A8C: boost::asio::detail::kqueue_reactor::deregister_descriptor(int, boost::asio::detail::kqueue_reactor::descriptor_state*&, bool) (kqueue_reactor.ipp:280)
    ==61723==    by 0x147596: boost::asio::detail::reactive_socket_service_base::destroy(boost::asio::detail::reactive_socket_service_base::base_implementation_type&) (reactive_socket_service_base.ipp:87)
    ==61723==    by 0x1475F8: boost::asio::stream_socket_service<boost::asio::ip::tcp>::destroy(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&) (stream_socket_service.hpp:119)
    ==61723==    by 0x147620: boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_io_object() (basic_io_object.hpp:124)
    ==61723==    by 0x14763C: boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_socket() (basic_socket.hpp:1455)
    ==61723==    by 0x147658: boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_stream_socket() (basic_stream_socket.hpp:47)
    ==61723==    by 0x1477D9: boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >::~stream() (stream.hpp:114)
    ==61723==    by 0x147882: AcceptedConnectionImpl<boost::asio::ip::tcp>::~AcceptedConnectionImpl() (bitcoinrpc.cpp:2539)
    ==61723==    by 0x93F3B: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2879)
    ==61723==  Address 0x4a88428 is 8 bytes inside a block of size 84 free'd
    ==61723==    at 0x120C477: operator delete(void*) (vg_replace_malloc.c:387)
    ==61723==    by 0x11973F: void boost::asio::detail::object_pool_access::destroy<boost::asio::detail::kqueue_reactor::descriptor_state>(boost::asio::detail::kqueue_reactor::descriptor_state*) (object_pool.hpp:41)
    ==61723==    by 0x11977A: boost::asio::detail::object_pool<boost::asio::detail::kqueue_reactor::descriptor_state>::destroy_list(boost::asio::detail::kqueue_reactor::descriptor_state*) (object_pool.hpp:131)
    ==61723==    by 0x1197BC: boost::asio::detail::object_pool<boost::asio::detail::kqueue_reactor::descriptor_state>::~object_pool() (object_pool.hpp:73)
    ==61723==    by 0x13F2E1: boost::asio::detail::kqueue_reactor::~kqueue_reactor() (kqueue_reactor.ipp:59)
    ==61723==    by 0xA4EA5: boost::asio::detail::service_registry::destroy(boost::asio::io_service::service*) (service_registry.ipp:101)
    ==61723==    by 0x119819: boost::asio::detail::service_registry::~service_registry() (service_registry.ipp:45)
    ==61723==    by 0x1198CC: boost::asio::io_service::~io_service() (io_service.ipp:53)
    ==61723==    by 0x8C83E: ThreadRPCServer2(void*) (bitcoinrpc.cpp:2782)
    ==61723==    by 0x8D5BB: ThreadRPCServer(void*) (bitcoinrpc.cpp:2584)
    ==61723==    by 0x8D571: ThreadRPCServer(void*) (bitcoinrpc.cpp:2576)
    ==61723==    by 0x8D571: ThreadRPCServer(void*) (bitcoinrpc.cpp:2576)
    ==61723== 
    ==61723== Invalid read of size 1
    ==61723==    at 0x140A92: boost::asio::detail::kqueue_reactor::deregister_descriptor(int, boost::asio::detail::kqueue_reactor::descriptor_state*&, bool) (kqueue_reactor.ipp:282)
    ==61723==    by 0x147596: boost::asio::detail::reactive_socket_service_base::destroy(boost::asio::detail::reactive_socket_service_base::base_implementation_type&) (reactive_socket_service_base.ipp:87)
    ==61723==    by 0x1475F8: boost::asio::stream_socket_service<boost::asio::ip::tcp>::destroy(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&) (stream_socket_service.hpp:119)
    ==61723==    by 0x147620: boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_io_object() (basic_io_object.hpp:124)
    ==61723==    by 0x14763C: boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_socket() (basic_socket.hpp:1455)
    ==61723==    by 0x147658: boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_stream_socket() (basic_stream_socket.hpp:47)
    ==61723==    by 0x1477D9: boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >::~stream() (stream.hpp:114)
    ==61723==    by 0x147882: AcceptedConnectionImpl<boost::asio::ip::tcp>::~AcceptedConnectionImpl() (bitcoinrpc.cpp:2539)
    ==61723==    by 0x93F3B: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2879)
    ==61723==    by 0x93DE3: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2863)
    ==61723==    by 0x93DE3: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2863)
    ==61723==    by 0x93DE3: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2863)
    ==61723==  Address 0x4a88470 is 80 bytes inside a block of size 84 free'd
    ==61723==    at 0x120C477: operator delete(void*) (vg_replace_malloc.c:387)
    ==61723==    by 0x11973F: void boost::asio::detail::object_pool_access::destroy<boost::asio::detail::kqueue_reactor::descriptor_state>(boost::asio::detail::kqueue_reactor::descriptor_state*) (object_pool.hpp:41)
    ==61723==    by 0x11977A: boost::asio::detail::object_pool<boost::asio::detail::kqueue_reactor::descriptor_state>::destroy_list(boost::asio::detail::kqueue_reactor::descriptor_state*) (object_pool.hpp:131)
    ==61723==    by 0x1197BC: boost::asio::detail::object_pool<boost::asio::detail::kqueue_reactor::descriptor_state>::~object_pool() (object_pool.hpp:73)
    ==61723==    by 0x13F2E1: boost::asio::detail::kqueue_reactor::~kqueue_reactor() (kqueue_reactor.ipp:59)
    ==61723==    by 0xA4EA5: boost::asio::detail::service_registry::destroy(boost::asio::io_service::service*) (service_registry.ipp:101)
    ==61723==    by 0x119819: boost::asio::detail::service_registry::~service_registry() (service_registry.ipp:45)
    ==61723==    by 0x1198CC: boost::asio::io_service::~io_service() (io_service.ipp:53)
    ==61723==    by 0x8C83E: ThreadRPCServer2(void*) (bitcoinrpc.cpp:2782)
    ==61723==    by 0x8D5BB: ThreadRPCServer(void*) (bitcoinrpc.cpp:2584)
    ==61723==    by 0x8D571: ThreadRPCServer(void*) (bitcoinrpc.cpp:2576)
    ==61723==    by 0x8D571: ThreadRPCServer(void*) (bitcoinrpc.cpp:2576)
    ==61723== 
    ==61723== Invalid read of size 4
    ==61723==    at 0x1239775: pthread_mutex_unlock (in /usr/lib/libSystem.B.dylib)
    ==61723==    by 0x11B124: boost::asio::detail::posix_mutex::unlock() (posix_mutex.hpp:58)
    ==61723==    by 0x11B17C: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::~scoped_lock() (scoped_lock.hpp:44)
    ==61723==    by 0x140C99: boost::asio::detail::kqueue_reactor::deregister_descriptor(int, boost::asio::detail::kqueue_reactor::descriptor_state*&, bool) (kqueue_reactor.ipp:319)
    ==61723==    by 0x147596: boost::asio::detail::reactive_socket_service_base::destroy(boost::asio::detail::reactive_socket_service_base::base_implementation_type&) (reactive_socket_service_base.ipp:87)
    ==61723==    by 0x1475F8: boost::asio::stream_socket_service<boost::asio::ip::tcp>::destroy(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&) (stream_socket_service.hpp:119)
    ==61723==    by 0x147620: boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_io_object() (basic_io_object.hpp:124)
    ==61723==    by 0x14763C: boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_socket() (basic_socket.hpp:1455)
    ==61723==    by 0x147658: boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::~basic_stream_socket() (basic_stream_socket.hpp:47)
    ==61723==    by 0x1477D9: boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >::~stream() (stream.hpp:114)
    ==61723==    by 0x147882: AcceptedConnectionImpl<boost::asio::ip::tcp>::~AcceptedConnectionImpl() (bitcoinrpc.cpp:2539)
    ==61723==    by 0x93F3B: ThreadRPCServer3(void*) (bitcoinrpc.cpp:2879)
    ==61723==  Address 0x4a88428 is 8 bytes inside a block of size 84 free'd
    ==61723==    at 0x120C477: operator delete(void*) (vg_replace_malloc.c:387)
    ==61723==    by 0x11973F: void boost::asio::detail::object_pool_access::destroy<boost::asio::detail::kqueue_reactor::descriptor_state>(boost::asio::detail::kqueue_reactor::descriptor_state*) (object_pool.hpp:41)
    ==61723==    by 0x11977A: boost::asio::detail::object_pool<boost::asio::detail::kqueue_reactor::descriptor_state>::destroy_list(boost::asio::detail::kqueue_reactor::descriptor_state*) (object_pool.hpp:131)
    ==61723==    by 0x1197BC: boost::asio::detail::object_pool<boost::asio::detail::kqueue_reactor::descriptor_state>::~object_pool() (object_pool.hpp:73)
    ==61723==    by 0x13F2E1: boost::asio::detail::kqueue_reactor::~kqueue_reactor() (kqueue_reactor.ipp:59)
    ==61723==    by 0xA4EA5: boost::asio::detail::service_registry::destroy(boost::asio::io_service::service*) (service_registry.ipp:101)
    ==61723==    by 0x119819: boost::asio::detail::service_registry::~service_registry() (service_registry.ipp:45)
    ==61723==    by 0x1198CC: boost::asio::io_service::~io_service() (io_service.ipp:53)
    ==61723==    by 0x8C83E: ThreadRPCServer2(void*) (bitcoinrpc.cpp:2782)
    ==61723==    by 0x8D5BB: ThreadRPCServer(void*) (bitcoinrpc.cpp:2584)
    ==61723==    by 0x8D571: ThreadRPCServer(void*) (bitcoinrpc.cpp:2576)
    ==61723==    by 0x8D571: ThreadRPCServer(void*) (bitcoinrpc.cpp:2576)
    
  2. Diapolo commented at 9:20 PM on January 8, 2013: none

    Also for 0.7, @gavinandresen any news on this?

  3. sipa commented at 11:22 PM on April 23, 2013: member

    Solved by the thread rewrite?

  4. gavinandresen commented at 8:14 PM on May 7, 2013: contributor

    Valgrind happy now.

  5. gavinandresen closed this on May 7, 2013

  6. owlhooter referenced this in commit 54186a159f on Oct 10, 2018
  7. MarcoFalke locked this on Sep 8, 2021
Labels

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-02 15:16 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me