8000 TSAN says: double lock of mutex in sync client · Issue #6193 · realm/realm-core · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
TSAN says: double lock of mutex in sync client #6193
Closed
@finnschiermer

Description

@finnschiermer

A TSAN run of the realm-object-store-tests gives:

WARNING: ThreadSanitizer: double lock of a mutex (pid=72497)
    #0 pthread_mutex_lock ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:4240 (libtsan.so.0+0x53908)
    #1 __gthread_mutex_lock /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:749 (realm-object-store-tests+0x1bcce46)
    #2 std::mutex::lock() /usr/include/c++/11/bits/std_mutex.h:100 (realm-object-store-tests+0x1bcce46)
    #3 std::lock_guard<std::mutex>::lock_guard(std::mutex&) /usr/include/c++/11/bits/std_mutex.h:229 (realm-object-store-tests+0x1bcce46)
    #4 operator() /home/finn/core/realm-core/test/object-store/util/test_file.cpp:236 (realm-object-store-tests+0x1bcce46)
    #5 call_regular_void<wait_for_session(realm::Realm&, void (realm::SyncSession::*)(realm::util::UniqueFunction<void(std::error_code)>&&), std::chrono::seconds)::<lambda(std::error_code)> > /home/finn/core/realm-core/src/realm/util/functional.hpp:148 (realm-object-store-tests+0x1bcce46)
    #6 call /home/finn/core/realm-core/src/realm/util/functional.hpp:168 (realm-object-store-tests+0x1bcce46)
    #7 realm::util::UniqueFunction<void (std::error_code)>::operator()(std::error_code) const /home/finn/core/realm-core/src/realm/util/functional.hpp:94 (realm-object-store-tests+0x23a8f77)
    #8 operator() /home/finn/core/realm-core/src/realm/object-store/sync/sync_session.cpp:1111 (realm-object-store-tests+0x23a8f77)
    #9 call_regular_void<realm::SyncSession::add_completion_callback(realm::util::UniqueFunction<void(std::error_code)>, realm::_impl::SyncProgressNotifier::NotifierType)::<lambda(std::error_code)> > /home/finn/core/realm-core/src/realm/util/functional.hpp:148 (realm-object-store-tests+0x23a8f77)
    #10 call /home/finn/core/realm-core/src/realm/util/functional.hpp:168 (realm-object-store-tests+0x23a8f77)
    #11 realm::util::UniqueFunction<void (std::error_code)>::operator()(std::error_code) const /home/finn/core/realm-core/src/realm/util/functional.hpp:94 (realm-object-store-tests+0x25f1ab9)
    #12 realm::sync::SessionWrapper::on_download_completion() /home/finn/core/realm-core/src/realm/sync/client.cpp:1545 (realm-object-store-tests+0x25f1ab9)
    #13 realm::sync::ClientImpl::Session::on_download_completion() /home/finn/core/realm-core/src/realm/sync/client.cpp:719 (realm-object-store-tests+0x25f262e)
    #14 realm::sync::ClientImpl::Session::check_for_download_completion() /home/finn/core/realm-core/src/realm/sync/noinst/client_impl_base.cpp:2610 (realm-object-store-tests+0x26bc207)
    #15 realm::sync::ClientImpl::Session::receive_mark_message(unsigned long) /home/finn/core/realm-core/src/realm/sync/noinst/client_impl_base.cpp:2333 (realm-object-store-tests+0x26bc544)
    #16 realm::sync::ClientImpl::Connection::receive_mark_message(unsigned long, unsigned long) /home/finn/core/realm-core/src/realm/sync/noinst/client_impl_base.cpp:1319 (realm-object-store-tests+0x26bc65b)
    #17 void realm::_impl::ClientProtocol::parse_message_received<realm::sync::ClientImpl::Connection>(realm::sync::ClientImpl::Connection&, std::basic_string_view<char, std::char_traits<char> >) /home/finn/core/realm-core/src/realm/sync/noinst/protocol_codec.hpp:340 (realm-object-store-tests+0x26c84b4)
    #18 realm::sync::ClientImpl::Connection::handle_message_received(realm::util::Span<char const, 18446744073709551615ul>) /home/finn/core/realm-core/src/realm/sync/noinst/client_impl_base.cpp:972 (realm-object-store-tests+0x26be686)
    #19 realm::sync::ClientImpl::Connection::websocket_binary_message_received(realm::util::Span<char const, 18446744073709551615ul>) /home/finn/core/realm-core/src/realm/sync/noinst/client_impl_base.cpp:426 (realm-object-store-tests+0x26be686)
    #20 non-virtual thunk to realm::sync::websocket::(anonymous namespace)::DefaultWebSocketImpl::websocket_binary_message_received(char const*, unsigned long) <null> (realm-object-store-tests+0x26d46ee)
    #21 frame_reader_loop /home/finn/core/realm-core/src/realm/sync/network/websocket.cpp:986 (realm-object-store-tests+0x267df46)
    #22 operator() /home/finn/core/realm-core/src/realm/sync/network/websocket.cpp:1017 (realm-object-store-tests+0x267e857)
    #23 call_regular_void<(anonymous namespace)::WebSocket::frame_reader_loop()::<lambda(std::error_code, size_t)> > /home/finn/core/realm-core/src/realm/util/functional.hpp:148 (realm-object-store-tests+0x267e857)
    #24 call /home/finn/core/realm-core/src/realm/util/functional.hpp:168 (realm-object-store-tests+0x267e857)
    #25 realm::util::UniqueFunction<void (std::error_code, unsigned long)>::operator()(std::error_code, unsigned long) const /home/finn/core/realm-core/src/realm/util/functional.hpp:94 (realm-object-store-tests+0x2485d3a)
    #26 void realm::sync::network::Service::AsyncOper::do_recycle_and_execute_helper<realm::util::UniqueFunction<void (std::error_code, unsigned long)>, std::error_code, unsigned long>(bool, bool&, realm::util::UniqueFunction<void (std::error_code, unsigned long)>, std::error_code, unsigned long) /home/finn/core/realm-core/src/realm/sync/network/network.hpp:2774 (realm-object-store-tests+0x2485d3a)
    #27 void realm::sync::network::Service::AsyncOper::do_recycle_and_execute<realm::util::UniqueFunction<void (std::error_code, unsigned long)>, std::error_code&, unsigned long&>(bool, realm::util::UniqueFunction<void (std::error_code, unsigned long)>&, std::error_code&, unsigned long&) /home/finn/core/realm-core/src/realm/sync/network/network.hpp:2758 (realm-object-store-tests+0x2485d3a)
    #28 realm::sync::network::Service::BasicStreamOps<realm::sync::network::Socket>::BufferedReadOper<realm::util::UniqueFunction<void (std::error_code, unsigned long)> >::recycle_and_execute() /home/finn/core/realm-core/src/realm/sync/network/network.hpp:2629 (realm-object-store-tests+0x2485f77)
    #29 realm::sync::network::Service::Impl::execute(std::unique_ptr<realm::sync::network::Service::AsyncOper, realm::sync::network::Service::LendersOperDeleter>&) /home/finn/core/realm-core/src/realm/sync/network/network.cpp:1637 (realm-object-store-tests+0x26751a6)
    #30 realm::sync::network::Service::Impl::run() /home/finn/core/realm-core/src/realm/sync/network/network.cpp:1398 (realm-object-store-tests+0x26751a6)
    #31 realm::sync::network::Service::run() /home/finn/core/realm-core/src/realm/sync/network/network.cpp:1761 (realm-object-store-tests+0x266f336)
    #32 realm::sync::websocket::DefaultSocketProvider::run() /home/finn/core/realm-core/src/realm/sync/network/default_socket.hpp:64 (realm-object-store-tests+0x26e24f8)
    #33 realm::sync::ClientImpl::run() /home/finn/core/realm-core/src/realm/sync/client.cpp:502 (realm-object-store-tests+0x25e04db)
    #34 realm::sync::Client::run() /home/finn/core/realm-core/src/realm/sync/client.cpp:1776 (realm-object-store-tests+0x25e1cd6)
    #35 realm::_impl::SyncClient::SyncClient(std::shared_ptr<realm::util::Logger> const&, realm::SyncClientConfig const&, std::weak_ptr<realm::SyncManager const>)::{lambda()#2}::operator()() const /home/finn/core/realm-core/src/realm/object-store/sync/impl/sync_client.hpp:82 (realm-object-store-tests+0x23a18e1)
    #36 void std::__invoke_impl<void, realm::_impl::SyncClient::SyncClient(std::shared_ptr<realm::util::Logger> const&, realm::SyncClientConfig const&, std::weak_ptr<realm::SyncManager const>)::{lambda()#2}>(std::__invoke_other, realm::_impl::SyncClient::SyncClient(std::shared_ptr<realm::util::Logger> const&, realm::SyncClientConfig const&, std::weak_ptr<realm::SyncManager const>)::{lambda()#2}&&) /usr/include/c++/11/bits/invoke.h:61 (realm-object-store-tests+0x23a18e1)
    #37 std::__invoke_result<realm::_impl::SyncClient::SyncClient(std::shared_ptr<realm::util::Logger> const&, realm::SyncClientConfig const&, std::weak_ptr<realm::SyncManager const>)::{lambda()#2}>::type std::__invoke<realm::_impl::SyncClient::SyncClient(std::shared_ptr<realm::util::Logger> const&, realm::SyncClientConfig const&, std::weak_ptr<realm::SyncManager const>)::{lambda()#2}>(realm::_impl::SyncClient::SyncClient(std::shared_ptr<realm::util::Logger> const&, realm::SyncClientConfig const&, std::weak_ptr<realm::SyncManager const>)::{lambda()#2}&&) /usr/include/c++/11/bits/invoke.h:96 (realm-object-store-tests+0x23a18e1)
    #38 void std::thread::_Invoker<std::tuple<realm::_impl::SyncClient::SyncClient(std::shared_ptr<realm::util::Logger> const&, realm::SyncClientConfig const&, std::weak_ptr<realm::SyncManager const>)::{lambda()#2}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/include/c++/11/bits/std_thread.h:253 (realm-object-store-tests+0x23a18e1)
    #39 std::thread::_Invoker<std::tuple<realm::_impl::SyncClient::SyncClient(std::shared_ptr<realm::util::Logger> const&, realm::SyncClientConfig const&, std::weak_ptr<realm::SyncManager const>)::{lambda()#2}> >::operator()() /usr/include/c++/11/bits/std_thread.h:260 (realm-object-store-tests+0x23a18e1)
    #40 std::thread::_State_impl<std::thread::_Invoker<std::tuple<realm::_impl::SyncClient::SyncClient(std::shared_ptr<realm::util::Logger> const&, realm::SyncClientConfig const&, std::weak_ptr<realm::SyncManager const>)::{lambda()#2}> > >::_M_run() /usr/include/c++/11/bits/std_thread.h:211 (realm-object-store-tests+0x23a18e1)
    #41 <null> <null> (libstdc++.so.6+0xdc2b2)

  Location is heap block of size 128 at 0x7b200008c380 allocated by main thread:
    #0 operator new(unsigned long) ../../../../src/libsanitizer/tsan/tsan_new_delete.cpp:64 (libtsan.so.0+0x8f162)
    #1 std::shared_ptr<WaitForSessionState> std::make_shared<WaitForSessionState>() /usr/include/c++/11/ext/new_allocator.h:127 (realm-object-store-tests+0x1bccf29)
    #2 wait_for_session /home/finn/core/realm-core/test/object-store/util/test_file.cpp:229 (realm-object-store-tests+0x1bccf29)
    #3 wait_for_download(realm::Realm&, std::chrono::duration<long, std::ratio<1l, 1l> >) /home/finn/core/realm-core/test/object-store/util/test_file.cpp:258 (realm-object-store-tests+0x1bcd31c)
    #4 CATCH2_INTERNAL_TEST_45 /home/finn/core/realm-core/test/object-store/sync/session/session.cpp:618 (realm-object-store-tests+0x207c610)
    #5 Catch::TestCaseHandle::invoke() const src/catch2/../catch2/catch_test_case_info.hpp:114 (realm-object-store-tests+0x2190e56)
    #6 Catch::RunContext::invokeActiveTestCase() src/catch2/internal/catch_run_context.cpp:503 (realm-object-store-tests+0x2190e56)
    #7 Catch::TestCaseHandle::invoke() const src/catch2/../catch2/catch_test_case_info.hpp:114 (realm-object-store-tests+0x2190e56)
    #8 Catch::RunContext::invokeActiveTestCase() src/catch2/internal/catch_run_context.cpp:503 (realm-object-store-tests+0x2190e56)
    #9 Catch::TestCaseHandle::invoke() const src/catch2/../catch2/catch_test_case_info.hpp:114 (realm-object-store-tests+0x2190e56)
    #10 Catch::RunContext::invokeActiveTestCase() src/catch2/internal/catch_run_context.cpp:503 (realm-object-store-tests+0x2190e56)
    #11 Catch::TestCaseHandle::invoke() const src/catch2/../catch2/catch_test_case_info.hpp:114 (realm-object-store-tests+0x2190e56)
    #12 Catch::RunContext::invokeActiveTestCase() src/catch2/internal/catch_run_context.cpp:503 (realm-object-store-tests+0x2190e56)
    #13 __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 (libc.so.6+0x29d8f)

  Mutex M1312147 (0x7b200008c3c0) created at:
    #0 pthread_mute
5DC0
x_lock ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:4240 (libtsan.so.0+0x53908)
    #1 __gthread_mutex_lock /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:749 (realm-object-store-tests+0x1bcd13f)
    #2 std::mutex::lock() /usr/include/c++/11/bits/std_mutex.h:100 (realm-object-store-tests+0x1bcd13f)
    #3 std::unique_lock<std::mutex>::lock() /usr/include/c++/11/bits/unique_lock.h:139 (realm-object-store-tests+0x1bcd13f)
    #4 std::unique_lock<std::mutex>::unique_lock(std::mutex&) /usr/include/c++/11/bits/unique_lock.h:69 (realm-object-store-tests+0x1bcd13f)
    #5 wait_for_session /home/finn/core/realm-core/test/object-store/util/test_file.cpp:241 (realm-object-store-tests+0x1bcd13f)
    #6 wait_for_download(realm::Realm&, std::chrono::duration<long, std::ratio<1l, 1l> >) /home/finn/core/realm-core/test/object-store/util/test_file.cpp:258 (realm-object-store-tests+0x1bcd31c)
    #7 CATCH2_INTERNAL_TEST_45 /home/finn/core/realm-core/test/object-store/sync/session/session.cpp:618 (realm-object-store-tests+0x207c610)
    #8 Catch::TestCaseHandle::invoke() const src/catch2/../catch2/catch_test_case_info.hpp:114 (realm-object-store-tests+0x2190e56)
    #9 Catch::RunContext::invokeActiveTestCase() src/catch2/internal/catch_run_context.cpp:503 (realm-object-store-tests+0x2190e56)
    #10 Catch::TestCaseHandle::invoke() const src/catch2/../catch2/catch_test_case_info.hpp:114 (realm-object-store-tests+0x2190e56)
    #11 Catch::RunContext::invokeActiveTestCase() src/catch2/internal/catch_run_context.cpp:503 (realm-object-store-tests+0x2190e56)
    #12 Catch::TestCaseHandle::invoke() const src/catch2/../catch2/catch_test_case_info.hpp:114 (realm-object-store-tests+0x2190e56)
    #13 Catch::RunContext::invokeActiveTestCase() src/catch2/internal/catch_run_context.cpp:503 (realm-object-store-tests+0x2190e56)
    #14 Catch::TestCaseHandle::invoke() const src/catch2/../catch2/catch_test_case_info.hpp:114 (realm-object-store-tests+0x2190e56)
    #15 Catch::RunContext::invokeActiveTestCase() src/catch2/internal/catch_run_context.cpp:503 (realm-object-store-tests+0x2190e56)
    #16 __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 (libc.so.6+0x29d8f)

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0