[ 
https://issues.apache.org/jira/browse/ARROW-17682?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Weston Pace closed ARROW-17682.
-------------------------------
    Resolution: Duplicate

Technically this one came first but closing as a duplicate of ARROW-17687 as it 
has the PR.  Both are heap-use-after-free in ContinueTasksUnlocked and so I am 
fairly certain they are the same issue.

> [CI][C++] Nightly test-ubuntu-20.04-cpp-thread-sanitizer fails 
> arrow-utility-test around the AsyncTaskScheduler
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: ARROW-17682
>                 URL: https://issues.apache.org/jira/browse/ARROW-17682
>             Project: Apache Arrow
>          Issue Type: Bug
>          Components: C++, Continuous Integration
>            Reporter: Raúl Cumplido
>            Priority: Blocker
>              Labels: Nightly
>             Fix For: 10.0.0
>
>
> The nightly tests for cpp thread sanitizer have been failing with the 
> following:
> {code:java}
>  [ RUN      ] AsyncTaskScheduler.ScanningStress
> ==================
> WARNING: ThreadSanitizer: heap-use-after-free (pid=10045)
>   Atomic read of size 1 at 0x7b2400010150 by thread T33:
>     #0 pthread_mutex_lock <null> (arrow-utility-test+0x1ab556)
>     #1 __gthread_mutex_lock(pthread_mutex_t*) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/x86_64-linux-gnu/c++/9/bits/gthr-default.h:749:12
>  (libarrow.so.1000+0x1676dd6)
>     #2 std::mutex::lock() 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/std_mutex.h:100:17
>  (libarrow.so.1000+0x167a52b)
>     #3 std::unique_lock<std::mutex>::lock() 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/unique_lock.h:141:17
>  (libarrow.so.1000+0x1965c33)
>     #4 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)
>  /arrow/cpp/src/arrow/util/async_util.cc:257:12 (libarrow.so.1000+0x19e8b56)
>     #5 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)::'lambda'()::operator()()
>  const::'lambda'(arrow::Status const&)::operator()(arrow::Status const&) 
> const /arrow/cpp/src/arrow/util/async_util.cc:247:17 
> (libarrow.so.1000+0x19e9793)
>     #6 
> arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)::'lambda'()::operator()()
>  const::'lambda'(arrow::Status const&)>::operator()(arrow::FutureImpl const&) 
> && /arrow/cpp/src/arrow/util/future.h:455:9 (libarrow.so.1000+0x19e96b5)
>     #7 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)::'lambda'()::operator()()
>  const::'lambda'(arrow::Status const&)> >::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x19e9634)
>     #8 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #9 
> arrow::ConcreteFutureImpl::RunOrScheduleCallback(std::shared_ptr<arrow::FutureImpl>
>  const&, arrow::FutureImpl::CallbackRecord&&, bool) 
> /arrow/cpp/src/arrow/util/future.cc:118:7 (libarrow.so.1000+0x1ac860c)
>     #10 arrow::ConcreteFutureImpl::DoMarkFinishedOrFailed(arrow::FutureState) 
> /arrow/cpp/src/arrow/util/future.cc:156:7 (libarrow.so.1000+0x1ac7e19)
>     #11 arrow::ConcreteFutureImpl::DoMarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:38:27 (libarrow.so.1000+0x1ac593d)
>     #12 arrow::FutureImpl::MarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:202:60 (libarrow.so.1000+0x1ac17ea)
>     #13 
> arrow::Future<arrow::internal::Empty>::DoMarkFinished(arrow::Result<arrow::internal::Empty>)
>  /arrow/cpp/src/arrow/util/future.h:658:14 (arrow-utility-test+0x304875)
>     #14 void 
> arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
> void>(arrow::Status) /arrow/cpp/src/arrow/util/future.h:409:12 
> (arrow-utility-test+0x2c746d)
>     #15 arrow::util::ThrottleImpl::Release(int) 
> /arrow/cpp/src/arrow/util/async_util.cc:60:26 (libarrow.so.1000+0x19ed858)
>     #16 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> 
> >)::'lambda'(arrow::Status const&)::operator()(arrow::Status const&) const 
> /arrow/cpp/src/arrow/util/async_util.cc:294:20 (libarrow.so.1000+0x19ea3a6)
>     #17 
> arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> 
> >)::'lambda'(arrow::Status const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/future.h:455:9 (libarrow.so.1000+0x19ea155)
>     #18 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> 
> >)::'lambda'(arrow::Status const&)> >::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x19ea0d4)
>     #19 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #20 arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void 
> (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper::operator()(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/future.cc:56:9 (libarrow.so.1000+0x1ad5446)
>     #21 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void
>  (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper>::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x1ad53b4)
>     #22 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #23 
> arrow::ConcreteFutureImpl::RunOrScheduleCallback(std::shared_ptr<arrow::FutureImpl>
>  const&, arrow::FutureImpl::CallbackRecord&&, bool) 
> /arrow/cpp/src/arrow/util/future.cc:118:7 (libarrow.so.1000+0x1ac860c)
>     #24 arrow::ConcreteFutureImpl::DoMarkFinishedOrFailed(arrow::FutureState) 
> /arrow/cpp/src/arrow/util/future.cc:156:7 (libarrow.so.1000+0x1ac7e19)
>     #25 arrow::ConcreteFutureImpl::DoMarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:38:27 (libarrow.so.1000+0x1ac593d)
>     #26 arrow::FutureImpl::MarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:202:60 (libarrow.so.1000+0x1ac17ea)
>     #27 
> arrow::Future<arrow::internal::Empty>::DoMarkFinished(arrow::Result<arrow::internal::Empty>)
>  /arrow/cpp/src/arrow/util/future.h:658:14 (arrow-utility-test+0x304875)
>     #28 void 
> arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
> void>(arrow::Status) /arrow/cpp/src/arrow/util/future.h:409:12 
> (arrow-utility-test+0x2c746d)
>     #29 std::enable_if<std::is_void<void>::value, void>::type 
> arrow::detail::ContinueFuture::operator()<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  void, arrow::Future<arrow::internal::Empty> 
> >(arrow::Future<arrow::internal::Empty>, 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28&&) 
> const /arrow/cpp/src/arrow/util/future.h:134:10 (arrow-utility-test+0x4527cd)
>     #30 void 
> arrow::detail::ContinueFuture::IgnoringArgsIf<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  arrow::Future<arrow::internal::Empty>, arrow::internal::Empty 
> const&>(std::integral_constant<bool, true>, 
> arrow::Future<arrow::internal::Empty>&&, 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28&&, 
> arrow::internal::Empty const&) const /arrow/cpp/src/arrow/util/future.h:188:5 
> (arrow-utility-test+0x4525e6)
>     #31 
> arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  >::operator()(arrow::Result<arrow::internal::Empty> const&) && 
> /arrow/cpp/src/arrow/util/future.h:545:25 (arrow-utility-test+0x452402)
>     #32 
> arrow::Future<arrow::internal::Empty>::WrapResultyOnComplete::Callback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  > >::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/future.h:442:9 (arrow-utility-test+0x45231d)
>     #54 arrow::ConcreteFutureImpl::DoMarkFinishedOrFailed(arrow::FutureState) 
> /arrow/cpp/src/arrow/util/future.cc:156:7 (libarrow.so.1000+0x1ac7e19)
>     #55 arrow::ConcreteFutureImpl::DoMarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:38:27 (libarrow.so.1000+0x1ac593d)
>     #56 arrow::FutureImpl::MarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:202:60 (libarrow.so.1000+0x1ac17ea)
>     #57 
> arrow::Future<arrow::internal::Empty>::DoMarkFinished(arrow::Result<arrow::internal::Empty>)
>  /arrow/cpp/src/arrow/util/future.h:658:14 (arrow-utility-test+0x304875)
>     #58 void 
> arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
> void>(arrow::Status) /arrow/cpp/src/arrow/util/future.h:409:12 
> (arrow-utility-test+0x2c746d)
>     #59 std::enable_if<std::is_void<void>::value, void>::type 
> arrow::detail::ContinueFuture::operator()<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  void, arrow::Future<arrow::internal::Empty> 
> >(arrow::Future<arrow::internal::Empty>, 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28&&) 
> const /arrow/cpp/src/arrow/util/future.h:134:10 (arrow-utility-test+0x4527cd)
>     #60 void 
> arrow::detail::ContinueFuture::IgnoringArgsIf<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  arrow::Future<arrow::internal::Empty>, arrow::internal::Empty 
> const&>(std::integral_constant<bool, true>, 
> arrow::Future<arrow::internal::Empty>&&, 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28&&, 
> arrow::internal::Empty const&) const /arrow/cpp/src/arrow/util/future.h:188:5 
> (arrow-utility-test+0x4525e6)
>     #61 
> arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  >::operator()(arrow::Result<arrow::internal::Empty> const&) && 
> /arrow/cpp/src/arrow/util/future.h:545:25 (arrow-utility-test+0x452402)
>     #62 
> arrow::Future<arrow::internal::Empty>::WrapResultyOnComplete::Callback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  > >::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/future.h:442:9 (arrow-utility-test+0x45231d)
>     #63 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::Future<arrow::internal::Empty>::WrapResultyOnComplete::Callback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  > > >::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (arrow-utility-test+0x4522a4)
>     #64 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #65 arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void 
> (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper::operator()(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/future.cc:56:9 (libarrow.so.1000+0x1ad5446)
>     #66 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void
>  (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper>::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x1ad53b4)
>     #67 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #68 
> arrow::ConcreteFutureImpl::RunOrScheduleCallback(std::shared_ptr<arrow::FutureImpl>
>  const&, arrow::FutureImpl::CallbackRecord&&, bool) 
> /arrow/cpp/src/arrow/util/future.cc:118:7 (libarrow.so.1000+0x1ac860c)
>     #69 arrow::ConcreteFutureImpl::DoMarkFinishedOrFailed(arrow::FutureState) 
> /arrow/cpp/src/arrow/util/future.cc:156:7 (libarrow.so.1000+0x1ac7e19)
>     #70 arrow::ConcreteFutureImpl::DoMarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:38:27 (libarrow.so.1000+0x1ac593d)
>     #71 arrow::FutureImpl::MarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:202:60 (libarrow.so.1000+0x1ac17ea)
>     #72 
> arrow::Future<arrow::internal::Empty>::DoMarkFinished(arrow::Result<arrow::internal::Empty>)
>  /arrow/cpp/src/arrow/util/future.h:658:14 (arrow-utility-test+0x304875)
>     #73 void 
> arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
> void>(arrow::Status) /arrow/cpp/src/arrow/util/future.h:409:12 
> (arrow-utility-test+0x2c746d)
>     #74 arrow::SleepABitAsync()::$_8::operator()() 
> /arrow/cpp/src/arrow/testing/gtest_util.cc:783:9 
> (libarrow_testing.so.1000+0x34326e)
>     #75 void std::__invoke_impl<void, 
> arrow::SleepABitAsync()::$_8>(std::__invoke_other, 
> arrow::SleepABitAsync()::$_8&&) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/invoke.h:60:14
>  (libarrow_testing.so.1000+0x3431f0)
>     #76 std::__invoke_result<arrow::SleepABitAsync()::$_8>::type 
> std::__invoke<arrow::SleepABitAsync()::$_8>(arrow::SleepABitAsync()::$_8&&) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/invoke.h:95:14
>  (libarrow_testing.so.1000+0x343100)
>     #77 void std::thread::_Invoker<std::tuple<arrow::SleepABitAsync()::$_8> 
> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/thread:244:13
>  (libarrow_testing.so.1000+0x3430a8)
>     #78 std::thread::_Invoker<std::tuple<arrow::SleepABitAsync()::$_8> 
> >::operator()() 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/thread:251:11
>  (libarrow_testing.so.1000+0x343048)
>     #79 
> std::thread::_State_impl<std::thread::_Invoker<std::tuple<arrow::SleepABitAsync()::$_8>
>  > >::_M_run() 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/thread:195:13
>  (libarrow_testing.so.1000+0x342dff)
>     #80 <null> <null> (libstdc++.so.6+0xd6de3)  Mutex M246711 
> (0x7b2400010150) created at:
>     #0 pthread_mutex_lock <null> (arrow-utility-test+0x1ab556)
>     #1 __gthread_mutex_lock(pthread_mutex_t*) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/x86_64-linux-gnu/c++/9/bits/gthr-default.h:749:12
>  (libarrow.so.1000+0x1676dd6)
>     #2 std::mutex::lock() 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/std_mutex.h:100:17
>  (libarrow.so.1000+0x167a52b)
>     #3 std::unique_lock<std::mutex>::lock() 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/unique_lock.h:141:17
>  (libarrow.so.1000+0x1965c33)
>     #4 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)
>  /arrow/cpp/src/arrow/util/async_util.cc:257:12 (libarrow.so.1000+0x19e8b56)
>     #5 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)::'lambda'()::operator()()
>  const::'lambda'(arrow::Status const&)::operator()(arrow::Status const&) 
> const /arrow/cpp/src/arrow/util/async_util.cc:247:17 
> (libarrow.so.1000+0x19e9793)
>     #6 
> arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)::'lambda'()::operator()()
>  const::'lambda'(arrow::Status const&)>::operator()(arrow::FutureImpl const&) 
> && /arrow/cpp/src/arrow/util/future.h:455:9 (libarrow.so.1000+0x19e96b5)
>     #7 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)::'lambda'()::operator()()
>  const::'lambda'(arrow::Status const&)> >::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x19e9634)
>     #8 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #9 
> arrow::ConcreteFutureImpl::RunOrScheduleCallback(std::shared_ptr<arrow::FutureImpl>
>  const&, arrow::FutureImpl::CallbackRecord&&, bool) 
> /arrow/cpp/src/arrow/util/future.cc:118:7 (libarrow.so.1000+0x1ac860c)
>     #10 arrow::ConcreteFutureImpl::DoMarkFinishedOrFailed(arrow::FutureState) 
> /arrow/cpp/src/arrow/util/future.cc:156:7 (libarrow.so.1000+0x1ac7e19)
>     #11 arrow::ConcreteFutureImpl::DoMarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:38:27 (libarrow.so.1000+0x1ac593d)
>     #12 arrow::FutureImpl::MarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:202:60 (libarrow.so.1000+0x1ac17ea)
>     #13 
> arrow::Future<arrow::internal::Empty>::DoMarkFinished(arrow::Result<arrow::internal::Empty>)
>  /arrow/cpp/src/arrow/util/future.h:658:14 (arrow-utility-test+0x304875)
>     #14 void 
> arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
> void>(arrow::Status) /arrow/cpp/src/arrow/util/future.h:409:12 
> (arrow-utility-test+0x2c746d)
>     #15 arrow::util::ThrottleImpl::Release(int) 
> /arrow/cpp/src/arrow/util/async_util.cc:60:26 (libarrow.so.1000+0x19ed858)
>     #16 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> 
> >)::'lambda'(arrow::Status const&)::operator()(arrow::Status const&) const 
> /arrow/cpp/src/arrow/util/async_util.cc:294:20 (libarrow.so.1000+0x19ea3a6)
>     #17 
> arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> 
> >)::'lambda'(arrow::Status const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/future.h:455:9 (libarrow.so.1000+0x19ea155)
>     #18 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> 
> >)::'lambda'(arrow::Status const&)> >::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x19ea0d4)
>     #19 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #20 arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void 
> (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper::operator()(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/future.cc:56:9 (libarrow.so.1000+0x1ad5446)
>     #21 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void
>  (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper>::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x1ad53b4)
>     #22 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #23 
> arrow::ConcreteFutureImpl::RunOrScheduleCallback(std::shared_ptr<arrow::FutureImpl>
>  const&, arrow::FutureImpl::CallbackRecord&&, bool) 
> /arrow/cpp/src/arrow/util/future.cc:118:7 (libarrow.so.1000+0x1ac860c)
>     #24 arrow::ConcreteFutureImpl::DoMarkFinishedOrFailed(arrow::FutureState) 
> /arrow/cpp/src/arrow/util/future.cc:156:7 (libarrow.so.1000+0x1ac7e19)
>     #25 arrow::ConcreteFutureImpl::DoMarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:38:27 (libarrow.so.1000+0x1ac593d)
>     #26 arrow::FutureImpl::MarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:202:60 (libarrow.so.1000+0x1ac17ea)
>     #27 
> arrow::Future<arrow::internal::Empty>::DoMarkFinished(arrow::Result<arrow::internal::Empty>)
>  /arrow/cpp/src/arrow/util/future.h:658:14 (arrow-utility-test+0x304875)
>     #28 void 
> arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
> void>(arrow::Status) /arrow/cpp/src/arrow/util/future.h:409:12 
> (arrow-utility-test+0x2c746d)
>     #29 std::enable_if<std::is_void<void>::value, void>::type 
> arrow::detail::ContinueFuture::operator()<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  void, arrow::Future<arrow::internal::Empty> 
> >(arrow::Future<arrow::internal::Empty>, 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28&&) 
> const /arrow/cpp/src/arrow/util/future.h:134:10 (arrow-utility-test+0x4527cd)
>     #30 void 
> arrow::detail::ContinueFuture::IgnoringArgsIf<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  arrow::Future<arrow::internal::Empty>, arrow::internal::Empty 
> const&>(std::integral_constant<bool, true>, 
> arrow::Future<arrow::internal::Empty>&&, 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28&&, 
> arrow::internal::Empty const&) const /arrow/cpp/src/arrow/util/future.h:188:5 
> (arrow-utility-test+0x4525e6)
>     #31 
> arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  >::operator()(arrow::Result<arrow::internal::Empty> const&) && 
> /arrow/cpp/src/arrow/util/future.h:545:25 (arrow-utility-test+0x452402)
>     #32 
> arrow::Future<arrow::internal::Empty>::WrapResultyOnComplete::Callback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  > >::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/future.h:442:9 (arrow-utility-test+0x45231d)
>     #33 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::Future<arrow::internal::Empty>::WrapResultyOnComplete::Callback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  > > >::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (arrow-utility-test+0x4522a4)
>     #34 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #35 arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void 
> (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper::operator()(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/future.cc:56:9 (libarrow.so.1000+0x1ad5446)
>     #36 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void
>  (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper>::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x1ad53b4)
>     #37 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #38 
> arrow::ConcreteFutureImpl::RunOrScheduleCallback(std::shared_ptr<arrow::FutureImpl>
>  const&, arrow::FutureImpl::CallbackRecord&&, bool) 
> /arrow/cpp/src/arrow/util/future.cc:118:7 (libarrow.so.1000+0x1ac860c)
>     #39 arrow::ConcreteFutureImpl::DoMarkFinishedOrFailed(arrow::FutureState) 
> /arrow/cpp/src/arrow/util/future.cc:156:7 (libarrow.so.1000+0x1ac7e19)
>     #40 arrow::ConcreteFutureImpl::DoMarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:38:27 (libarrow.so.1000+0x1ac593d)
>     #41 arrow::FutureImpl::MarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:202:60 (libarrow.so.1000+0x1ac17ea)
>     #42 
> arrow::Future<arrow::internal::Empty>::DoMarkFinished(arrow::Result<arrow::internal::Empty>)
>  /arrow/cpp/src/arrow/util/future.h:658:14 (arrow-utility-test+0x304875)
>     #43 void 
> arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
> void>(arrow::Status) /arrow/cpp/src/arrow/util/future.h:409:12 
> (arrow-utility-test+0x2c746d)
>     #44 arrow::SleepABitAsync()::$_8::operator()() 
> /arrow/cpp/src/arrow/testing/gtest_util.cc:783:9 
> (libarrow_testing.so.1000+0x34326e)
>     #45 void std::__invoke_impl<void, 
> arrow::SleepABitAsync()::$_8>(std::__invoke_other, 
> arrow::SleepABitAsync()::$_8&&) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/invoke.h:60:14
>  (libarrow_testing.so.1000+0x3431f0)
>     #46 std::__invoke_result<arrow::SleepABitAsync()::$_8>::type 
> std::__invoke<arrow::SleepABitAsync()::$_8>(arrow::SleepABitAsync()::$_8&&) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/invoke.h:95:14
>  (libarrow_testing.so.1000+0x343100)
>     #47 void std::thread::_Invoker<std::tuple<arrow::SleepABitAsync()::$_8> 
> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/thread:244:13
>  (libarrow_testing.so.1000+0x3430a8)
>     #48 std::thread::_Invoker<std::tuple<arrow::SleepABitAsync()::$_8> 
> >::operator()() 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/thread:251:11
>  (libarrow_testing.so.1000+0x343048)
>     #49 
> std::thread::_State_impl<std::thread::_Invoker<std::tuple<arrow::SleepABitAsync()::$_8>
>  > >::_M_run() 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/thread:195:13
>  (libarrow_testing.so.1000+0x342dff)
>     #50 <null> <null> (libstdc++.so.6+0xd6de3)  Mutex M1017385960381356864 is 
> already destroyed.  Thread T33 (tid=14479, running) created by main thread at:
>     #0 pthread_create <null> (arrow-utility-test+0x18dfab)
>     #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, 
> std::default_delete<std::thread::_State> >, void (*)()) <null> 
> (libstdc++.so.6+0xd70a8)
>     #2 arrow::SleepABitAsync() 
> /arrow/cpp/src/arrow/testing/gtest_util.cc:781:3 
> (libarrow_testing.so.1000+0x33cad8)
>     #3 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_29::operator()()
>  const /arrow/cpp/src/arrow/util/async_util_test.cc:372:39 
> (arrow-utility-test+0x451976)
>     #4 
> arrow::util::AsyncTaskScheduler::SimpleTask<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_29>::operator()(arrow::util::AsyncTaskScheduler*)
>  /arrow/cpp/src/arrow/util/async_util.h:182:14 (arrow-utility-test+0x4518ef)
>     #5 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> >) 
> /arrow/cpp/src/arrow/util/async_util.cc:269:38 (libarrow.so.1000+0x19e9a05)
>     #6 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::SubmitTaskUnlocked(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> >, 
> std::unique_lock<std::mutex>&&) /arrow/cpp/src/arrow/util/async_util.cc:326:5 
> (libarrow.so.1000+0x19e8388)
>     #7 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::AddTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> >) 
> /arrow/cpp/src/arrow/util/async_util.cc:163:9 (libarrow.so.1000+0x19e676f)
>     #8 bool 
> arrow::util::AsyncTaskScheduler::AddSimpleTask<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_29>(arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_29)
>  /arrow/cpp/src/arrow/util/async_util.h:189:12 (arrow-utility-test+0x4513a1)
>     #9 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30::operator()()
>  const /arrow/cpp/src/arrow/util/async_util_test.cc:377:9 
> (arrow-utility-test+0x45104b)
>     #10 std::enable_if<std::is_void<void>::value, void>::type 
> arrow::detail::ContinueFuture::operator()<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30,
>  void, arrow::Future<arrow::internal::Empty> 
> >(arrow::Future<arrow::internal::Empty>, 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30&&) 
> const /arrow/cpp/src/arrow/util/future.h:133:5 (arrow-utility-test+0x450e50)
>     #11 void 
> arrow::detail::ContinueFuture::IgnoringArgsIf<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30,
>  arrow::Future<arrow::internal::Empty>, arrow::internal::Empty 
> const&>(std::integral_constant<bool, true>, 
> arrow::Future<arrow::internal::Empty>&&, 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30&&, 
> arrow::internal::Empty const&) const /arrow/cpp/src/arrow/util/future.h:188:5 
> (arrow-utility-test+0x450c86)
>     #12 
> arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30>
>  >::operator()(arrow::Result<arrow::internal::Empty> const&) && 
> /arrow/cpp/src/arrow/util/future.h:545:25 (arrow-utility-test+0x450aa1)
>     #13 
> arrow::Future<arrow::internal::Empty>::WrapResultyOnComplete::Callback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30>
>  > >::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/future.h:442:9 (arrow-utility-test+0x4509ad)
>     #14 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::Future<arrow::internal::Empty>::WrapResultyOnComplete::Callback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30>
>  > > >::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (arrow-utility-test+0x450934)
>     #15 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #16 arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void 
> (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper::operator()(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/future.cc:56:9 (libarrow.so.1000+0x1ad5446)
>     #17 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void
>  (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper>::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x1ad53b4)
>     #18 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #19 
> arrow::ConcreteFutureImpl::RunOrScheduleCallback(std::shared_ptr<arrow::FutureImpl>
>  const&, arrow::FutureImpl::CallbackRecord&&, bool) 
> /arrow/cpp/src/arrow/util/future.cc:118:7 (libarrow.so.1000+0x1ac860c)
>     #20 arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void 
> (arrow::FutureImpl const&)>, arrow::CallbackOptions) 
> /arrow/cpp/src/arrow/util/future.cc:68:7 (libarrow.so.1000+0x1ac5bdd)
>     #21 arrow::FutureImpl::AddCallback(arrow::internal::FnOnce<void 
> (arrow::FutureImpl const&)>, arrow::CallbackOptions) 
> /arrow/cpp/src/arrow/util/future.cc:207:28 (libarrow.so.1000+0x1ac1903)
>     #22 void 
> arrow::Future<arrow::internal::Empty>::AddCallback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30>
>  >, 
> arrow::Future<arrow::internal::Empty>::WrapResultyOnComplete::Callback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30>
>  > > 
> >(arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30>
>  >, arrow::CallbackOptions) const /arrow/cpp/src/arrow/util/future.h:493:12 
> (arrow-utility-test+0x450381)
>     #23 arrow::Future<arrow::internal::Empty> 
> arrow::Future<arrow::internal::Empty>::Then<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30>,
>  
> arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30>
>  >, arrow::Future<arrow::internal::Empty> 
> >(arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30, 
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_30>,
>  arrow::CallbackOptions) const /arrow/cpp/src/arrow/util/future.h:607:5 
> (arrow-utility-test+0x4501fd)
>     #24 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_26::operator()()
>  const /arrow/cpp/src/arrow/util/async_util_test.cc:384:65 
> (arrow-utility-test+0x45006a)
>     #25 
> arrow::util::AsyncTaskScheduler::SimpleTask<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_26>::operator()(arrow::util::AsyncTaskScheduler*)
>  /arrow/cpp/src/arrow/util/async_util.h:182:14 (arrow-utility-test+0x44ff5f)
>     #26 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> >) 
> /arrow/cpp/src/arrow/util/async_util.cc:269:38 (libarrow.so.1000+0x19e9a05)
>     #27 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::SubmitTaskUnlocked(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> >, 
> std::unique_lock<std::mutex>&&) /arrow/cpp/src/arrow/util/async_util.cc:326:5 
> (libarrow.so.1000+0x19e8388)
>     #28 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::AddTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> >) 
> /arrow/cpp/src/arrow/util/async_util.cc:166:7 (libarrow.so.1000+0x19e67fd)
>     #29 bool 
> arrow::util::AsyncTaskScheduler::AddSimpleTask<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_26>(arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_26)
>  /arrow/cpp/src/arrow/util/async_util.h:189:12 (arrow-utility-test+0x432fb1)
>     #30 arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody() 
> /arrow/cpp/src/arrow/util/async_util_test.cc:386:7 
> (arrow-utility-test+0x432516)
>     #31 void 
> testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, 
> void>(testing::Test*, void (testing::Test::*)(), char const*) 
> /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest.cc:2607:10
>  (libgtestd.so.1.11.0+0xbeac3)
>     #32 main /arrow/cpp/src/arrow/util/logging_test.cc:102:10 
> (arrow-utility-test+0x8620e6)SUMMARY: ThreadSanitizer: heap-use-after-free 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/unique_ptr.h:154:42
>  in std::__uniq_ptr_impl<arrow::util::AsyncTaskScheduler::Queue, 
> std::default_delete<arrow::util::AsyncTaskScheduler::Queue> >::_M_ptr() const
> ==================
> ThreadSanitizer:DEADLYSIGNAL
> ==10045==ERROR: ThreadSanitizer: SEGV on unknown address 0x000000000000 (pc 
> 0x7f9472c8f8e3 bp 0x7f94696bb900 sp 0x7f94696bb7e0 T14479)
> ==10045==The signal is caused by a READ memory access.
> ==10045==Hint: address points to the zero page.
>     #0 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)
>  /arrow/cpp/src/arrow/util/async_util.cc:239:21 (libarrow.so.1000+0x19e88e3)
>     #1 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)::'lambda'()::operator()()
>  const::'lambda'(arrow::Status const&)::operator()(arrow::Status const&) 
> const /arrow/cpp/src/arrow/util/async_util.cc:247:17 
> (libarrow.so.1000+0x19e9793)
>     #2 
> arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)::'lambda'()::operator()()
>  const::'lambda'(arrow::Status const&)>::operator()(arrow::FutureImpl const&) 
> && /arrow/cpp/src/arrow/util/future.h:455:9 (libarrow.so.1000+0x19e96b5)
>     #3 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)::'lambda'()::operator()()
>  const::'lambda'(arrow::Status const&)> >::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x19e9634)
>     #4 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #5 
> arrow::ConcreteFutureImpl::RunOrScheduleCallback(std::shared_ptr<arrow::FutureImpl>
>  const&, arrow::FutureImpl::CallbackRecord&&, bool) 
> /arrow/cpp/src/arrow/util/future.cc:118:7 (libarrow.so.1000+0x1ac860c)
>     #6 arrow::ConcreteFutureImpl::DoMarkFinishedOrFailed(arrow::FutureState) 
> /arrow/cpp/src/arrow/util/future.cc:156:7 (libarrow.so.1000+0x1ac7e19)
>     #7 arrow::ConcreteFutureImpl::DoMarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:38:27 (libarrow.so.1000+0x1ac593d)
>     #8 arrow::FutureImpl::MarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:202:60 (libarrow.so.1000+0x1ac17ea)
>     #9 
> arrow::Future<arrow::internal::Empty>::DoMarkFinished(arrow::Result<arrow::internal::Empty>)
>  /arrow/cpp/src/arrow/util/future.h:658:14 (arrow-utility-test+0x304875)
>     #10 void 
> arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
> void>(arrow::Status) /arrow/cpp/src/arrow/util/future.h:409:12 
> (arrow-utility-test+0x2c746d)
>     #11 arrow::util::ThrottleImpl::Release(int) 
> /arrow/cpp/src/arrow/util/async_util.cc:60:26 (libarrow.so.1000+0x19ed858)
>     #12 arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> 
> >)::'lambda'(arrow::Status const&)::operator()(arrow::Status const&) const 
> /arrow/cpp/src/arrow/util/async_util.cc:294:20 (libarrow.so.1000+0x19ea3a6)
>     #13 
> arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> 
> >)::'lambda'(arrow::Status const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/future.h:455:9 (libarrow.so.1000+0x19ea155)
>     #14 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::Future<arrow::internal::Empty>::WrapStatusyOnComplete::Callback<arrow::util::(anonymous
>  
> namespace)::AsyncTaskSchedulerImpl::DoSubmitTask(std::unique_ptr<arrow::util::AsyncTaskScheduler::Task,
>  std::default_delete<arrow::util::AsyncTaskScheduler::Task> 
> >)::'lambda'(arrow::Status const&)> >::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x19ea0d4)
>     #15 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #16 arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void 
> (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper::operator()(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/future.cc:56:9 (libarrow.so.1000+0x1ad5446)
>     #17 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void
>  (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper>::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x1ad53b4)
>     #18 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #19 
> arrow::ConcreteFutureImpl::RunOrScheduleCallback(std::shared_ptr<arrow::FutureImpl>
>  const&, arrow::FutureImpl::CallbackRecord&&, bool) 
> /arrow/cpp/src/arrow/util/future.cc:118:7 (libarrow.so.1000+0x1ac860c)
>     #20 arrow::ConcreteFutureImpl::DoMarkFinishedOrFailed(arrow::FutureState) 
> /arrow/cpp/src/arrow/util/future.cc:156:7 (libarrow.so.1000+0x1ac7e19)
>     #21 arrow::ConcreteFutureImpl::DoMarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:38:27 (libarrow.so.1000+0x1ac593d)
>     #22 arrow::FutureImpl::MarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:202:60 (libarrow.so.1000+0x1ac17ea)
>     #23 
> arrow::Future<arrow::internal::Empty>::DoMarkFinished(arrow::Result<arrow::internal::Empty>)
>  /arrow/cpp/src/arrow/util/future.h:658:14 (arrow-utility-test+0x304875)
>     #24 void 
> arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
> void>(arrow::Status) /arrow/cpp/src/arrow/util/future.h:409:12 
> (arrow-utility-test+0x2c746d)
>     #25 std::enable_if<std::is_void<void>::value, void>::type 
> arrow::detail::ContinueFuture::operator()<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  void, arrow::Future<arrow::internal::Empty> 
> >(arrow::Future<arrow::internal::Empty>, 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28&&) 
> const /arrow/cpp/src/arrow/util/future.h:134:10 (arrow-utility-test+0x4527cd)
>     #26 void 
> arrow::detail::ContinueFuture::IgnoringArgsIf<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  arrow::Future<arrow::internal::Empty>, arrow::internal::Empty 
> const&>(std::integral_constant<bool, true>, 
> arrow::Future<arrow::internal::Empty>&&, 
> arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28&&, 
> arrow::internal::Empty const&) const /arrow/cpp/src/arrow/util/future.h:188:5 
> (arrow-utility-test+0x4525e6)
>     #27 
> arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  >::operator()(arrow::Result<arrow::internal::Empty> const&) && 
> /arrow/cpp/src/arrow/util/future.h:545:25 (arrow-utility-test+0x452402)
>     #28 
> arrow::Future<arrow::internal::Empty>::WrapResultyOnComplete::Callback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  > >::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/future.h:442:9 (arrow-utility-test+0x45231d)
>     #29 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::Future<arrow::internal::Empty>::WrapResultyOnComplete::Callback<arrow::Future<arrow::internal::Empty>::ThenOnComplete<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28,
>  
> arrow::Future<arrow::internal::Empty>::PassthruOnFailure<arrow::util::AsyncTaskScheduler_ScanningStress_Test::TestBody()::$_28>
>  > > >::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (arrow-utility-test+0x4522a4)
>     #30 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #31 arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void 
> (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper::operator()(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/future.cc:56:9 (libarrow.so.1000+0x1ad5446)
>     #32 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::FnImpl<arrow::ConcreteFutureImpl::AddCallback(arrow::internal::FnOnce<void
>  (arrow::FutureImpl const&)>, 
> arrow::CallbackOptions)::SpanWrapper>::invoke(arrow::FutureImpl const&) 
> /arrow/cpp/src/arrow/util/functional.h:152:42 (libarrow.so.1000+0x1ad53b4)
>     #33 arrow::internal::FnOnce<void (arrow::FutureImpl 
> const&)>::operator()(arrow::FutureImpl const&) && 
> /arrow/cpp/src/arrow/util/functional.h:140:17 (libarrow.so.1000+0x1ac97ce)
>     #34 
> arrow::ConcreteFutureImpl::RunOrScheduleCallback(std::shared_ptr<arrow::FutureImpl>
>  const&, arrow::FutureImpl::CallbackRecord&&, bool) 
> /arrow/cpp/src/arrow/util/future.cc:118:7 (libarrow.so.1000+0x1ac860c)
>     #35 arrow::ConcreteFutureImpl::DoMarkFinishedOrFailed(arrow::FutureState) 
> /arrow/cpp/src/arrow/util/future.cc:156:7 (libarrow.so.1000+0x1ac7e19)
>     #36 arrow::ConcreteFutureImpl::DoMarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:38:27 (libarrow.so.1000+0x1ac593d)
>     #37 arrow::FutureImpl::MarkFinished() 
> /arrow/cpp/src/arrow/util/future.cc:202:60 (libarrow.so.1000+0x1ac17ea)
>     #38 
> arrow::Future<arrow::internal::Empty>::DoMarkFinished(arrow::Result<arrow::internal::Empty>)
>  /arrow/cpp/src/arrow/util/future.h:658:14 (arrow-utility-test+0x304875)
>     #39 void 
> arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
> void>(arrow::Status) /arrow/cpp/src/arrow/util/future.h:409:12 
> (arrow-utility-test+0x2c746d)
>     #40 arrow::SleepABitAsync()::$_8::operator()() 
> /arrow/cpp/src/arrow/testing/gtest_util.cc:783:9 
> (libarrow_testing.so.1000+0x34326e)
>     #41 void std::__invoke_impl<void, 
> arrow::SleepABitAsync()::$_8>(std::__invoke_other, 
> arrow::SleepABitAsync()::$_8&&) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/invoke.h:60:14
>  (libarrow_testing.so.1000+0x3431f0)
>     #42 std::__invoke_result<arrow::SleepABitAsync()::$_8>::type 
> std::__invoke<arrow::SleepABitAsync()::$_8>(arrow::SleepABitAsync()::$_8&&) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/invoke.h:95:14
>  (libarrow_testing.so.1000+0x343100)
>     #43 void std::thread::_Invoker<std::tuple<arrow::SleepABitAsync()::$_8> 
> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/thread:244:13
>  (libarrow_testing.so.1000+0x3430a8)
>     #44 std::thread::_Invoker<std::tuple<arrow::SleepABitAsync()::$_8> 
> >::operator()() 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/thread:251:11
>  (libarrow_testing.so.1000+0x343048)
>     #45 
> std::thread::_State_impl<std::thread::_Invoker<std::tuple<arrow::SleepABitAsync()::$_8>
>  > >::_M_run() 
> /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/thread:195:13
>  (libarrow_testing.so.1000+0x342dff)
>     #46 <null> <null> (libstdc++.so.6+0xd6de3)
>     #47 __tsan_thread_start_func <null> (arrow-utility-test+0x18df0c)
>     #48 start_thread <null> (libpthread.so.0+0x8608)
>     #49 clone <null> (libc.so.6+0x11f132)ThreadSanitizer can not provide 
> additional info.
> SUMMARY: ThreadSanitizer: SEGV /arrow/cpp/src/arrow/util/async_util.cc:239:21 
> in arrow::util::(anonymous 
> namespace)::AsyncTaskSchedulerImpl::ContinueTasksUnlocked(std::unique_lock<std::mutex>&&)
> ==10045==ABORTING
> ThreadSanitizer or leak check failures in 
> /build/cpp/build/test-logs/arrow-utility-test.txt
> /build/cpp/src/arrow/util{code}
> One example of nightly failures:
> [https://github.com/ursacomputing/crossbow/runs/8296567948]
> This started when this PR was merged and seems related:
> [https://github.com/apache/arrow/pull/13912] 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to