0

asio::ip::tcp::socket::async_connect を使用して helgrind エラーが発生し、同時に io_service::run がスレッド プールで実行されています。レポートは次のとおりです。


スレッド #6 による 0x507bb50 でのサイズ 8 の読み取り中にデータ競合が発生する可能性があります

==13316== 0xDDF1CC で: boost::asio::detail::epoll_reactor::descriptor_state::perform_io(unsigned int) (epoll_reactor.ipp:610)

==13316== by 0xDDF355: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost ::system::error_code const&, unsigned long) (epoll_reactor.ipp:648)

==13316== by 0xD7CF93: boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&, boost::system::error_code const&, unsigned long) (task_io_service_operation.hpp: 37)

==13316== by 0xE17469: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock&, boost::asio::detail::task_io_service::thread_info&, boost:: asio::detail::op_queue&、boost::system::error_code const&) (task_io_service.ipp:394)

==13316== by 0xE1713B: boost::asio::detail::task_io_service::run(boost::system::error_code&) (task_io_service.ipp:146)

==13316== by 0xE176FC: boost::asio:: io_service::run() (io_service.ipp:59)

==13316== by 0xF97421: Common::ServiceRunner::ServiceThread() (ServiceRunner.cpp:67) ....

これは、スレッド #9 によるサイズ 8 の以前の書き込みと競合します。

==13316== 0xDDE5EF で: boost::asio::detail::epoll_reactor::register_descriptor(int, boost::asio::detail::epoll_reactor::descriptor_state*&) (epoll_reactor.ipp:156)

==13316== by 0xE75C34: boost::asio::detail::reactive_socket_service_base::do_open(boost::asio::detail::reactive_socket_service_base::base_implementation_type&, int, int, int, boost::system::error_code&) (reactive_socket_service_base.ipp:152)

==13316== by 0xE7B6E2: boost::asio::detail::reactive_socket_service::open(boost::asio::detail::reactive_socket_service::implementation_type&, boost::asio::ip::tcp const&, boost: :system::error_code&) (reactive_socket_service.hpp:106)

==13316== by 0xE79FF7: boost::asio::stream_socket_service:: open (boost::asio::detail::reactive_socket_service::implementation_type&, boost::asio::ip::tcp const&, boost::system: :error_code&) (stream_socket_service.hpp:127)

==13316== by 0xE78904: void boost::asio::basic_socket >:: async_connect >, boost::_bi::list3 >, boost::arg<1> (*)(), boost::_bi::値 > > > > >(boost::asio::ip::basic_endpoint const&, boost::asio::detail::wrapped_handler >, boost::_bi::list3 >, boost::arg<1> (*) (), boost::_bi::value > > > > const&) (basic_socket.hpp:712) ==13316== by 0xE7376B: Common::Comms::TCPClient::HandleResolve(boost::system::error_code const& 、boost::asio::ip::basic_resolver_iterator) (TCPClient.cpp:297)


* async_connect は実際の問題ではありませんが、io_service::run が実行されているときにソケットを開くことは問題であることがわかりました。

あなたの助けを前もって感謝します

4

0 に答える 0