Closed
Description
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
Assignees
Labels
No labels