chriskohlhoff / asio

Asio C++ Library
http://think-async.com/Asio
4.73k stars 1.2k forks source link

Segmentation fault with timer when enabling IO_URING #1349

Open FrothyB opened 10 months ago

FrothyB commented 10 months ago
...
boost::asio::steady_timer timer;
...
timer.expires_after(std::chrono::nanoseconds(throttle_ns));
timer.async_wait([this]([[maybe_unused]] auto ec) {
...

The above code causes the following segmentation fault when building with uring (-DBOOST_ASIO_HAS_IO_URING -DBOOST_ASIO_DISABLE_EPOLL -DBOOST_ASIO_HAS_IO_URING_AS_DEFAULT).

Address sanitizer shows:

==298916==ERROR: AddressSanitizer: SEGV on unknown address 0x7fff0000401f (pc 0x55aba0c0f4b4 bp 0x7f0f459b61a0 sp 0x7f0f459b6150 T3) ==298916==The signal is caused by a READ memory access.

0 0x55aba0c0f4b4 in boost::asio::detail::timer_queue_set::wait_duration_usec(long) const /usr/local/boost/boost/asio/detail/impl/timer_queue_set.ipp:81:23

#1 0x55aba0ce4a0a in boost::asio::detail::epoll_reactor::get_timeout(itimerspec&) /usr/local/boost/boost/asio/detail/impl/epoll_reactor.ipp:719:29
#2 0x55aba0ce482b in boost::asio::detail::epoll_reactor::update_timeout() /usr/local/boost/boost/asio/detail/impl/epoll_reactor.ipp:696:17
#3 0x55aba0cedd07 in void boost::asio::detail::epoll_reactor::schedule_timer<boost::asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, boost::asio::wait_traits<std::chrono::_V2::steady_clock>>>(boost::asio::detail::timer_queue<boost::asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, boost::asio::wait_traits<std::chrono::_V2::steady_clock>>>&, boost::asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, boost::asio::wait_traits<std::chrono::_V2::steady_clock>>::time_type const&, boost::asio::detail::timer_queue<boost::asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, boost::asio::wait_traits<std::chrono::_V2::steady_clock>>>::per_timer_data&, boost::asio::detail::wait_op*) /usr/local/boost/boost/asio/detail/impl/epoll_reactor.hpp:62:5

.....