You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Status Shutdown() {
if (self_pipe_.rfd == 0) {
// Already closedreturnStatus::OK();
}
if (PIPE_WRITE(self_pipe_.wfd, "0", 1) < 0 && errno != EAGAIN &&
errno != EWOULDBLOCK && errno != EINTR) {
returnarrow::internal::IOErrorFromErrno(errno, "Could not unblock signal thread");
}
RETURN_NOT_OK(arrow::internal::FileClose(self_pipe_.rfd));
RETURN_NOT_OK(arrow::internal::FileClose(self_pipe_.wfd));
handle_signals_.join();
self_pipe_.rfd = 0;
self_pipe_.wfd = 0;
returnStatus::OK();
}
This closes the pipe, then joins the thread. The thread is running this:
staticvoidWaitForSignals(int fd) {
// Wait for a signal handler to write to the pipeint8_t buf[1];
while (PIPE_READ(fd, /*buf=*/buf, /*count=*/1) == -1) {
if (errno == EINTR) {
continue;
}
ARROW_CHECK_OK(arrow::internal::IOErrorFromErrno(
errno, "Error while waiting for shutdown signal"));
}
auto instance = running_instance_.load();
if (instance != nullptr) {
instance->server_->Shutdown();
}
}
So it's possible that 1) we shutdown, 2) we close the pipe, 3) the thread calls PIPE_READ, 4) we get an error (errno 9, invalid fd) because the pipe was closed. We should either ignore the error (and break), or join the thread before closing the pipe.
[ RUN ] TestFlightSqlServer.TestCommandGetExportedKeys
/arrow/cpp/src/arrow/flight/server.cc:884: Check failed: _s.ok() Operation failed: arrow::internal::IOErrorFromErrno( (*__errno_location ()), "Error while waiting for shutdown signal")
Bad status: IOError: Error while waiting for shutdown signal. Detail: [errno 9] Bad file descriptor
/opt/conda/envs/arrow/lib/libarrow.so.700(+0x12afab8)[0x7fe71fa07ab8]
/opt/conda/envs/arrow/lib/libarrow.so.700(+0x12afa36)[0x7fe71fa07a36]
/opt/conda/envs/arrow/lib/libarrow.so.700(+0x12afa58)[0x7fe71fa07a58]
/opt/conda/envs/arrow/lib/libarrow.so.700(arrow::util::ArrowLog::~ArrowLog()+0x47)[0x7fe71fa07db7]
/opt/conda/envs/arrow/lib/libarrow_flight.so.700(+0x1ef89c)[0x7fe721b9a89c]
/opt/conda/envs/arrow/lib/libarrow_flight.so.700(+0x20456d)[0x7fe721baf56d]
/opt/conda/envs/arrow/lib/libarrow_flight.so.700(+0x204414)[0x7fe721baf414]
/opt/conda/envs/arrow/lib/libarrow_flight.so.700(+0x2042b8)[0x7fe721baf2b8]
/opt/conda/envs/arrow/lib/libarrow_flight.so.700(+0x2041fc)[0x7fe721baf1fc]
/opt/conda/envs/arrow/lib/libarrow_flight.so.700(+0x2032ed)[0x7fe721bae2ed]
/opt/conda/envs/arrow/lib/libstdc++.so.6(+0xcc9d4)[0x7fe71e45a9d4]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x76db)[0x7fe71e5406db]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x3f)[0x7fe71e0be71f]
Found core dump, printing backtrace:
warning: core file may not match specified executable file.
[New LWP 20513]
[New LWP 20392]
[New LWP 20393]
[New LWP 20401]
[New LWP 20430]
[New LWP 20508]
[New LWP 20509]
[New LWP 20510]
[New LWP 20511]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/build/cpp/debug/arrow-flight-sql-test'.
Program terminated with signal SIGABRT, Aborted.
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
[Current thread is 1 (Thread 0x7fe710ffc700 (LWP 20513))]
Thread 9 (Thread 0x7fe712ffe700 (LWP 20511)):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007fe71d4c03cb in absl::lts_20210324::synchronization_internal::Waiter::Wait(absl::lts_20210324::synchronization_internal::KernelTimeout) () from /opt/conda/envs/arrow/lib/libabsl_synchronization.so.2103.0.1
#2 0x00007fe71d4c0283 in AbslInternalPerThreadSemWait_lts_20210324 () from /opt/conda/envs/arrow/lib/libabsl_synchronization.so.2103.0.1
#3 0x00007fe71d4c2f41 in absl::lts_20210324::CondVar::WaitCommon(absl::lts_20210324::Mutex*, absl::lts_20210324::synchronization_internal::KernelTimeout) () from /opt/conda/envs/arrow/lib/libabsl_synchronization.so.2103.0.1
#4 0x00007fe71ca7678c in gpr_cv_wait () from /opt/conda/envs/arrow/lib/./libgpr.so.20
#5 0x00007fe71d78704d in timer_thread(void*) () from /opt/conda/envs/arrow/lib/libgrpc.so.20
#6 0x00007fe71ca7c868 in grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&)::{lambda(void*)#1}::_FUN(void*) () from /opt/conda/envs/arrow/lib/./libgpr.so.20
#7 0x00007fe71e5406db in start_thread (arg=0x7fe712ffe700) at pthread_create.c:463
#8 0x00007fe71e0be71f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 8 (Thread 0x7fe713fff700 (LWP 20510)):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007fe71d4c0367 in absl::lts_20210324::synchronization_internal::Waiter::Wait(absl::lts_20210324::synchronization_internal::KernelTimeout) () from /opt/conda/envs/arrow/lib/libabsl_synchronization.so.2103.0.1
#2 0x00007fe71d4c0283 in AbslInternalPerThreadSemWait_lts_20210324 () from /opt/conda/envs/arrow/lib/libabsl_synchronization.so.2103.0.1
#3 0x00007fe71d4c2f41 in absl::lts_20210324::CondVar::WaitCommon(absl::lts_20210324::Mutex*, absl::lts_20210324::synchronization_internal::KernelTimeout) () from /opt/conda/envs/arrow/lib/libabsl_synchronization.so.2103.0.1
#4 0x00007fe71ca767b0 in gpr_cv_wait () from /opt/conda/envs/arrow/lib/./libgpr.so.20
#5 0x00007fe71d770327 in grpc_core::Executor::ThreadMain(void*) () from /opt/conda/envs/arrow/lib/libgrpc.so.20
#6 0x00007fe71ca7c868 in grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&)::{lambda(void*)#1}::_FUN(void*) () from /opt/conda/envs/arrow/lib/./libgpr.so.20
#7 0x00007fe71e5406db in start_thread (arg=0x7fe713fff700) at pthread_create.c:463
#8 0x00007fe71e0be71f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 7 (Thread 0x7fe7193fd700 (LWP 20509)):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007fe71d4c0367 in absl::lts_20210324::synchronization_internal::Waiter::Wait(absl::lts_20210324::synchronization_internal::KernelTimeout) () from /opt/conda/envs/arrow/lib/libabsl_synchronization.so.2103.0.1
#2 0x00007fe71d4c0283 in AbslInternalPerThreadSemWait_lts_20210324 () from /opt/conda/envs/arrow/lib/libabsl_synchronization.so.2103.0.1
#3 0x00007fe71d4c2f41 in absl::lts_20210324::CondVar::WaitCommon(absl::lts_20210324::Mutex*, absl::lts_20210324::synchronization_internal::KernelTimeout) () from /opt/conda/envs/arrow/lib/libabsl_synchronization.so.2103.0.1
#4 0x00007fe71ca767b0 in gpr_cv_wait () from /opt/conda/envs/arrow/lib/./libgpr.so.20
#5 0x00007fe71d770327 in grpc_core::Executor::ThreadMain(void*) () from /opt/conda/envs/arrow/lib/libgrpc.so.20
#6 0x00007fe71ca7c868 in grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&)::{lambda(void*)#1}::_FUN(void*) () from /opt/conda/envs/arrow/lib/./libgpr.so.20
#7 0x00007fe71e5406db in start_thread (arg=0x7fe7193fd700) at pthread_create.c:463
#8 0x00007fe71e0be71f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 6 (Thread 0x7fe71a3fe700 (LWP 20508)):
#0 0x00007fe71e541d2d in __GI___pthread_timedjoin_ex (threadid=140630399371008, thread_return=0x0, abstime=0x0, block=<optimized out>) at pthread_join_common.c:89
#1 0x00007fe71e45a87f in __gthread_join (__value_ptr=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>, __threadid=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>) at /home/conda/feedstock_root/build_artifacts/gcc_compilers_1634095553113/work/build/x86_64-conda-linux-gnu/libstdc++-v3/src/c++11/thread:669
#2 std::thread::join (this=0x7fe71a3fc078) at /home/conda/feedstock_root/build_artifacts/gcc_compilers_1634095553113/work/build/x86_64-conda-linux-gnu/libstdc++-v3/include/bits/new_allocator.h:112
#3 0x00007fe721b9a439 in arrow::flight::ServerSignalHandler::Shutdown (this=0x7fe71a3fc070) at /arrow/cpp/src/arrow/flight/server.cc:831
#4 0x00007fe721b9a50d in arrow::flight::ServerSignalHandler::~ServerSignalHandler (this=0x7fe71a3fc070, __in_chrg=<optimized out>) at /arrow/cpp/src/arrow/flight/server.cc:837
#5 0x00007fe721b9c0be in arrow::flight::FlightServerBase::Serve (this=0x7fe700011df0) at /arrow/cpp/src/arrow/flight/server.cc:986
#6 0x0000561f8f499f3c in arrow::flight::sql::TestFlightSqlServer::RunServer (this=0x561f8f9b3b80) at /arrow/cpp/src/arrow/flight/sql/server_test.cc:196
#7 0x0000561f8f498fa5 in arrow::flight::sql::TestFlightSqlServer::SetUp()::{lambda()#1}::operator()() const (__closure=0x561f8f96f598) at /arrow/cpp/src/arrow/flight/sql/server_test.cc:152
#8 0x0000561f8f4c0cc0 in std::__invoke_impl<void, arrow::flight::sql::TestFlightSqlServer::SetUp()::{lambda()#1}>(std::__invoke_other, arrow::flight::sql::TestFlightSqlServer::SetUp()::{lambda()#1}&&) (__f=...) at /opt/conda/envs/arrow/x86_64-conda-linux-gnu/include/c++/9.4.0/bits/invoke.h:60
#9 0x0000561f8f4c0bf9 in std::__invoke<arrow::flight::sql::TestFlightSqlServer::SetUp()::{lambda()#1}>(std::__invoke_result&&, (arrow::flight::sql::TestFlightSqlServer::SetUp()::{lambda()#1}&&)...) (__fn=...) at /opt/conda/envs/arrow/x86_64-conda-linux-gnu/include/c++/9.4.0/bits/invoke.h:95
#10 0x0000561f8f4c0acb in std::thread::_Invoker<std::tuple<arrow::flight::sql::TestFlightSqlServer::SetUp()::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (this=0x561f8f96f598) at /opt/conda/envs/arrow/x86_64-conda-linux-gnu/include/c++/9.4.0/thread:244
#11 0x0000561f8f4c090c in std::thread::_Invoker<std::tuple<arrow::flight::sql::TestFlightSqlServer::SetUp()::{lambda()#1}> >::operator()() (this=0x561f8f96f598) at /opt/conda/envs/arrow/x86_64-conda-linux-gnu/include/c++/9.4.0/thread:251
#12 0x0000561f8f4bfa71 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<arrow::flight::sql::TestFlightSqlServer::SetUp()::{lambda()#1}> > >::_M_run() (this=0x561f8f96f590) at /opt/conda/envs/arrow/x86_64-conda-linux-gnu/include/c++/9.4.0/thread:195
#13 0x00007fe71e45a9d4 in std::execute_native_thread_routine (__p=<optimized out>) at /home/conda/feedstock_root/build_artifacts/gcc_compilers_1634095553113/work/build/x86_64-conda-linux-gnu/libstdc++-v3/include/bits/new_allocator.h:82
#14 0x00007fe71e5406db in start_thread (arg=0x7fe71a3fe700) at pthread_create.c:463
#15 0x00007fe71e0be71f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 5 (Thread 0x7fe70d3ff700 (LWP 20430)):
#0 0x00007fe71e547065 in futex_abstimed_wait_cancelable (private=<optimized out>, abstime=0x7fe70d3fd420, expected=0, futex_word=0x7fe71ba0a790) at ../sysdeps/unix/sysv/linux/futex-internal.h:205
#1 __pthread_cond_wait_common (abstime=0x7fe70d3fd420, mutex=0x7fe71ba0a7d8, cond=0x7fe71ba0a768) at pthread_cond_wait.c:539
#2 __pthread_cond_timedwait (cond=cond@entry=0x7fe71ba0a768, mutex=mutex@entry=0x7fe71ba0a7d8, abstime=abstime@entry=0x7fe70d3fd420) at pthread_cond_wait.c:667
#3 0x00007fe720d74a36 in background_thread_sleep (tsdn=<optimized out>, interval=<optimized out>, info=0x7fe71ba0a760) at src/background_thread.c:255
#4 background_work_sleep_once (ind=<optimized out>, info=<optimized out>, tsdn=<optimized out>) at src/background_thread.c:307
#5 background_work (ind=<optimized out>, tsd=<optimized out>) at src/background_thread.c:497
#6 background_thread_entry () at src/background_thread.c:522
#7 0x00007fe71e5406db in start_thread (arg=0x7fe70d3ff700) at pthread_create.c:463
#8 0x00007fe71e0be71f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 4 (Thread 0x7fe70ebff700 (LWP 20401)):
#0 0x00007fe71e547065 in futex_abstimed_wait_cancelable (private=<optimized out>, abstime=0x7fe70ebfd420, expected=0, futex_word=0x7fe71ba0a6c4) at ../sysdeps/unix/sysv/linux/futex-internal.h:205
#1 __pthread_cond_wait_common (abstime=0x7fe70ebfd420, mutex=0x7fe71ba0a708, cond=0x7fe71ba0a698) at pthread_cond_wait.c:539
#2 __pthread_cond_timedwait (cond=cond@entry=0x7fe71ba0a698, mutex=mutex@entry=0x7fe71ba0a708, abstime=abstime@entry=0x7fe70ebfd420) at pthread_cond_wait.c:667
#3 0x00007fe720d74a36 in background_thread_sleep (tsdn=<optimized out>, interval=<optimized out>, info=0x7fe71ba0a690) at src/background_thread.c:255
#4 background_work_sleep_once (ind=<optimized out>, info=<optimized out>, tsdn=<optimized out>) at src/background_thread.c:307
#5 background_work (ind=<optimized out>, tsd=<optimized out>) at src/background_thread.c:497
#6 background_thread_entry () at src/background_thread.c:522
#7 0x00007fe71e5406db in start_thread (arg=0x7fe70ebff700) at pthread_create.c:463
#8 0x00007fe71e0be71f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 3 (Thread 0x7fe71b3ff700 (LWP 20393)):
#0 0x00007fe71e547065 in futex_abstimed_wait_cancelable (private=<optimized out>, abstime=0x7fe71b3fd420, expected=0, futex_word=0x7fe71ba0a5f4) at ../sysdeps/unix/sysv/linux/futex-internal.h:205
#1 __pthread_cond_wait_common (abstime=0x7fe71b3fd420, mutex=0x7fe71ba0a638, cond=0x7fe71ba0a5c8) at pthread_cond_wait.c:539
#2 __pthread_cond_timedwait (cond=cond@entry=0x7fe71ba0a5c8, mutex=mutex@entry=0x7fe71ba0a638, abstime=abstime@entry=0x7fe71b3fd420) at pthread_cond_wait.c:667
#3 0x00007fe720d75166 in background_thread_sleep (tsdn=<optimized out>, interval=<optimized out>, info=<optimized out>) at src/background_thread.c:255
#4 background_work_sleep_once (ind=0, info=<optimized out>, tsdn=<optimized out>) at src/background_thread.c:307
#5 background_thread0_work (tsd=<optimized out>) at src/background_thread.c:452
#6 background_work (ind=<optimized out>, tsd=<optimized out>) at src/background_thread.c:490
#7 background_thread_entry () at src/background_thread.c:522
#8 0x00007fe71e5406db in start_thread (arg=0x7fe71b3ff700) at pthread_create.c:463
#9 0x00007fe71e0be71f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 2 (Thread 0x7fe71bce2140 (LWP 20392)):
#0 0x00007fe71e541d2d in __GI___pthread_timedjoin_ex (threadid=140630554568448, thread_return=0x0, abstime=0x0, block=<optimized out>) at pthread_join_common.c:89
#1 0x00007fe71e45a87f in __gthread_join (__value_ptr=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>, __threadid=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>) at /home/conda/feedstock_root/build_artifacts/gcc_compilers_1634095553113/work/build/x86_64-conda-linux-gnu/libstdc++-v3/src/c++11/thread:669
#2 std::thread::join (this=0x561f8f96f570) at /home/conda/feedstock_root/build_artifacts/gcc_compilers_1634095553113/work/build/x86_64-conda-linux-gnu/libstdc++-v3/include/bits/new_allocator.h:112
#3 0x0000561f8f49977b in arrow::flight::sql::TestFlightSqlServer::TearDown (this=0x561f8f9b3b80) at /arrow/cpp/src/arrow/flight/sql/server_test.cc:173
#4 0x00007fe72259bc9c in testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void> (object=0x561f8f9b3b80, method=&virtual testing::Test::TearDown(), location=0x7fe7225b0989 "TearDown()") at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest.cc:2607
#5 0x00007fe722592dd2 in testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void> (object=0x561f8f9b3b80, method=&virtual testing::Test::TearDown(), location=0x7fe7225b0989 "TearDown()") at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest.cc:2643
#6 0x00007fe72256dc4e in testing::Test::Run (this=0x561f8f9b3b80) at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest.cc:2690
#7 0x00007fe72256e63b in testing::TestInfo::Run (this=0x561f8f989390) at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest.cc:2861
#8 0x00007fe72256f010 in testing::TestSuite::Run (this=0x561f8f9938c0) at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest.cc:3015
#9 0x00007fe72257f31c in testing::internal::UnitTestImpl::RunAllTests (this=0x561f8f990d90) at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest.cc:5855
#10 0x00007fe72259cce8 in testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> (object=0x561f8f990d90, method=(bool (testing::internal::UnitTestImpl::*)(testing::internal::UnitTestImpl * const)) 0x7fe72257eed8 <testing::internal::UnitTestImpl::RunAllTests()>, location=0x7fe7225b1468 "auxiliary test code (environments or event listeners)") at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest.cc:2607
#11 0x00007fe722594064 in testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> (object=0x561f8f990d90, method=(bool (testing::internal::UnitTestImpl::*)(testing::internal::UnitTestImpl * const)) 0x7fe72257eed8 <testing::internal::UnitTestImpl::RunAllTests()>, location=0x7fe7225b1468 "auxiliary test code (environments or event listeners)") at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest.cc:2643
#12 0x00007fe72257d7b7 in testing::UnitTest::Run (this=0x7fe7225dd260 <testing::UnitTest::GetInstance()::instance>) at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest.cc:5438
#13 0x00007fe7225de919 in RUN_ALL_TESTS () at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/include/gtest/gtest.h:2490
#14 0x00007fe7225de95c in main (argc=1, argv=0x7ffee00fe7a8) at /build/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/gtest_main.cc:52
#15 0x00007fe71dfbebf7 in __libc_start_main (main=0x7fe7225de91b <main(int, char**)>, argc=1, argv=0x7ffee00fe7a8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffee00fe798) at ../csu/libc-start.c:310
#16 0x0000561f8f45b7f9 in _start ()
Thread 1 (Thread 0x7fe710ffc700 (LWP 20513)):
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007fe71dfdd921 in __GI_abort () at abort.c:79
#2 0x00007fe71fa07a3c in arrow::util::CerrLog::~CerrLog (this=0x7fe71402a570, __in_chrg=<optimized out>) at /arrow/cpp/src/arrow/util/logging.cc:72
#3 0x00007fe71fa07a58 in arrow::util::CerrLog::~CerrLog (this=0x7fe71402a570, __in_chrg=<optimized out>) at /arrow/cpp/src/arrow/util/logging.cc:74
#4 0x00007fe71fa07db7 in arrow::util::ArrowLog::~ArrowLog (this=0x7fe710ffa360, __in_chrg=<optimized out>) at /arrow/cpp/src/arrow/util/logging.cc:250
#5 0x00007fe721b9a89c in arrow::flight::FlightServerBase::Impl::WaitForSignals (fd=14) at /arrow/cpp/src/arrow/flight/server.cc:884
#6 0x00007fe721baf56d in std::__invoke_impl<void, void (*)(int), int> (__f=@0x7fe7000251a0: 0x7fe721b9a701 <arrow::flight::FlightServerBase::Impl::WaitForSignals(int)>) at /opt/conda/envs/arrow/x86_64-conda-linux-gnu/include/c++/9.4.0/bits/invoke.h:60
#7 0x00007fe721baf414 in std::__invoke<void (*)(int), int> (__fn=@0x7fe7000251a0: 0x7fe721b9a701 <arrow::flight::FlightServerBase::Impl::WaitForSignals(int)>) at /opt/conda/envs/arrow/x86_64-conda-linux-gnu/include/c++/9.4.0/bits/invoke.h:95
#8 0x00007fe721baf2b8 in std::thread::_Invoker<std::tuple<void (*)(int), int> >::_M_invoke<0ul, 1ul> (this=0x7fe700025198) at /opt/conda/envs/arrow/x86_64-conda-linux-gnu/include/c++/9.4.0/thread:244
#9 0x00007fe721baf1fc in std::thread::_Invoker<std::tuple<void (*)(int), int> >::operator() (this=0x7fe700025198) at /opt/conda/envs/arrow/x86_64-conda-linux-gnu/include/c++/9.4.0/thread:251
#10 0x00007fe721bae2ed in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(int), int> > >::_M_run (this=0x7fe700025190) at /opt/conda/envs/arrow/x86_64-conda-linux-gnu/include/c++/9.4.0/thread:195
#11 0x00007fe71e45a9d4 in std::execute_native_thread_routine (__p=<optimized out>) at /home/conda/feedstock_root/build_artifacts/gcc_compilers_1634095553113/work/build/x86_64-conda-linux-gnu/libstdc++-v3/include/bits/new_allocator.h:82
#12 0x00007fe71e5406db in start_thread (arg=0x7fe710ffc700) at pthread_create.c:463
#13 0x00007fe71e0be71f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
/build/cpp/src/arrow/flight/sql
Start 101: arrow-feather-test
Observed in a PR.
What the problem appears to be:
This closes the pipe, then joins the thread. The thread is running this:
So it's possible that 1) we shutdown, 2) we close the pipe, 3) the thread calls PIPE_READ, 4) we get an error (errno 9, invalid fd) because the pipe was closed. We should either ignore the error (and break), or join the thread before closing the pipe.
Reporter: David Li / @lidavidm
Assignee: David Li / @lidavidm
PRs and other links:
Note: This issue was originally created as ARROW-15181. Please see the migration documentation for further details.
The text was updated successfully, but these errors were encountered: