rtpsw commented on PR #14799:
URL: https://github.com/apache/arrow/pull/14799#issuecomment-1361343016

   Note about [this recent 
commit](https://github.com/apache/arrow/pull/14799/commits/39df9e1c0ca2f27521021e5292a6055082eda4fe):
   
   In gdb, the error had this backtrace:
   ```
   Thread 3 "arrow-substrait" received signal SIGSEGV, Segmentation fault.
   [Switching to Thread 0x7ffff07fe640 (LWP 6962)]
   0x00007ffff29f2cdd in __dynamic_cast () from 
/lib/x86_64-linux-gnu/libstdc++.so.6
   (gdb) bt
   #0  0x00007ffff29f2cdd in __dynamic_cast () from 
/lib/x86_64-linux-gnu/libstdc++.so.6
   #1  0x00007ffff48d732b in 
arrow::internal::checked_cast<arrow::ConcreteFutureImpl*, arrow::FutureImpl*&> 
(value=@0x7ffff07fcdc8: 0x555555a4bae0)
       at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/util/checked_cast.h:38
   #2  0x00007ffff48d386b in arrow::(anonymous namespace)::GetConcreteFuture 
(future=0x555555a4bae0) at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/util/future.cc:172
   #3  0x00007ffff48d3ab8 in arrow::FutureImpl::MarkFinished 
(this=0x555555a4bae0) at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/util/future.cc:193
   #4  0x0000555555785dfc in 
arrow::Future<arrow::internal::Empty>::DoMarkFinished (this=0x555555a4a5a8, 
res=...) at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/util/future.h:658
   #5  0x0000555555784902 in 
arrow::Future<arrow::internal::Empty>::MarkFinished<arrow::internal::Empty, 
void> (this=0x555555a4a5a8, s=...)
       at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/util/future.h:409
   #6  0x00007ffff4a93f6b in 
arrow::compute::AsofJoinNode::CheckEnded()::{lambda()#1}::operator()() 
const::{lambda()#1}::operator()() const (__closure=0x7ffff07fcf20)
       at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/asof_join_node.cc:972
   #7  0x00007ffff4a9c1a4 in 
arrow::compute::AsofJoinNode::Defer<arrow::compute::AsofJoinNode::CheckEnded()::{lambda()#1}::operator()()
 const::{lambda()#1}>::~Defer() (this=0x7ffff07fcf20, 
       __in_chrg=<optimized out>) at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/asof_join_node.cc:966
   #8  0x00007ffff4a93ee3 in 
arrow::compute::AsofJoinNode::CheckEnded()::{lambda()#1}::operator()() const 
(__closure=0x7ffff07fd0b0)
       at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/asof_join_node.cc:975
   #9  0x00007ffff4ab01ef in std::__invoke_impl<arrow::Status, 
arrow::compute::AsofJoinNode::CheckEnded()::{lambda()#1}&>(std::__invoke_other, 
arrow::compute::AsofJoinNode::CheckEnded()::{lambda()#1}&) (
       __f=...) at /usr/include/c++/11/bits/invoke.h:61
   #10 0x00007ffff4aac13e in std::__invoke_r<arrow::Status, 
arrow::compute::AsofJoinNode::CheckEnded()::{lambda()#1}&>(arrow::compute::AsofJoinNode::CheckEnded()::{lambda()#1}&)
 (__fn=...)
       at /usr/include/c++/11/bits/invoke.h:116
   #11 0x00007ffff4aa65e5 in std::_Function_handler<arrow::Status (), 
arrow::compute::AsofJoinNode::CheckEnded()::{lambda()#1}>::_M_invoke(std::_Any_data
 const&) (__functor=...)
       at /usr/include/c++/11/bits/std_function.h:291
   #12 0x00007ffff4ad109e in std::function<arrow::Status ()>::operator()() 
const (this=0x7ffff07fd0b0) at /usr/include/c++/11/bits/std_function.h:590
   #13 0x00007ffff4abf832 in arrow::compute::(anonymous 
namespace)::ExecPlanImpl::ScheduleTask(std::function<arrow::Status()>) 
(this=0x555555a495e0, fn=...)
       at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/exec_plan.cc:94
   #14 0x00007ffff4ac17fe in 
arrow::compute::ExecPlan::ScheduleTask(std::function<arrow::Status ()>) 
(this=0x555555a495e0, fn=...)
       at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/exec_plan.cc:385
   #15 0x00007ffff4a94059 in arrow::compute::AsofJoinNode::CheckEnded 
(this=0x555555a4a500) at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/asof_join_node.cc:971
   #16 0x00007ffff4a94235 in arrow::compute::AsofJoinNode::Process 
(this=0x555555a4a500) at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/asof_join_node.cc:983
   #17 0x00007ffff4a94597 in arrow::compute::AsofJoinNode::ProcessThread 
(this=0x555555a4a500) at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/asof_join_node.cc:1025
   #18 0x00007ffff4a945c2 in arrow::compute::AsofJoinNode::ProcessThreadWrapper 
(node=0x555555a4a500) at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/asof_join_node.cc:1031
   #19 0x00007ffff4ab8f48 in std::__invoke_impl<void, void 
(*)(arrow::compute::AsofJoinNode*), arrow::compute::AsofJoinNode*> (
       __f=@0x555555a4a960: 0x7ffff4a945a6 
<arrow::compute::AsofJoinNode::ProcessThreadWrapper(arrow::compute::AsofJoinNode*)>)
 at /usr/include/c++/11/bits/invoke.h:61
   #20 0x00007ffff4ab8ecd in std::__invoke<void 
(*)(arrow::compute::AsofJoinNode*), arrow::compute::AsofJoinNode*> (
       __fn=@0x555555a4a960: 0x7ffff4a945a6 
<arrow::compute::AsofJoinNode::ProcessThreadWrapper(arrow::compute::AsofJoinNode*)>)
 at /usr/include/c++/11/bits/invoke.h:96
   #21 0x00007ffff4ab8e2d in std::thread::_Invoker<std::tuple<void 
(*)(arrow::compute::AsofJoinNode*), arrow::compute::AsofJoinNode*> 
>::_M_invoke<0ul, 1ul> (this=0x555555a4a958)
       at /usr/include/c++/11/bits/std_thread.h:253
   #22 0x00007ffff4ab8de2 in std::thread::_Invoker<std::tuple<void 
(*)(arrow::compute::AsofJoinNode*), arrow::compute::AsofJoinNode*> 
>::operator() (this=0x555555a4a958)
       at /usr/include/c++/11/bits/std_thread.h:260
   #23 0x00007ffff4ab8dc2 in 
std::thread::_State_impl<std::thread::_Invoker<std::tuple<void 
(*)(arrow::compute::AsofJoinNode*), arrow::compute::AsofJoinNode*> > >::_M_run 
(this=0x555555a4a950)
       at /usr/include/c++/11/bits/std_thread.h:211
   #24 0x00007ffff2a222b3 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
   #25 0x00007ffff27b2b43 in start_thread (arg=<optimized out>) at 
./nptl/pthread_create.c:442
   #26 0x00007ffff2844a00 in clone3 () at 
../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
   ```
   I observed that gdb is able to statically cast to `ConcreteFutureImpl*` but 
fails to dynamically cast to it:
   ```
   (gdb) frame 6
   #6  0x00007ffff4a93f6b in 
arrow::compute::AsofJoinNode::CheckEnded()::{lambda()#1}::operator()() 
const::{lambda()#1}::operator()() const (__closure=0x7ffff07fcf20)
       at 
/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/asof_join_node.cc:972
   972             Defer cleanup([this]() { finished_.MarkFinished(); });
   (gdb) print dynamic_cast<arrow::ConcreteFutureImpl*>(finished_.impl_.get())
   Couldn't determine value's most derived type for dynamic_cast
   ```
   This suggests something with the RTTI of `ConcreteFutureImpl` is not right. 
I made several attempts to figure out the root cause but couldn't as yet. I 
therefore propose in this commit to use a `static_cast` to 
`ConcreteFutureImpl*` as a workaround.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to