Opened 8 years ago

Last modified 8 years ago

#4766 new Bugs

MinGW: ip_tcp test hangs on io_service::run() after tcp::socket::cancel()

Reported by: Jim Bell <jim@…> Owned by: chris_kohlhoff
Milestone: Boost 1.45.0 Component: asio
Version: Boost 1.44.0 Severity: Problem
Keywords: mingw gcc-4.4 tcp socket cancel io_service run Cc: jim@…

Description

The MinGW-32 trunk regression test (current as of 2010/10/21) simply says:

Run [2010-10-21 16:24:46 UTC]: fail

bjam.log says:

300 second time limit exceeded

Running it in gdb verifies that it seems hung indefinitely, and breaking shows this stack trace:

#0  0x7c90e514 in ntdll!LdrAccessResource ()
   from C:\WINDOWS\system32\ntdll.dll
#1  0x7c90da4a in ntdll!ZwRemoveIoCompletion ()
   from C:\WINDOWS\system32\ntdll.dll
#2  0x7c80a7e6 in KERNEL32!GetQueuedCompletionStatus ()
   from C:\WINDOWS\system32\kernel32.dll
#3  0x00443dfb in boost::asio::detail::win_iocp_io_service::do_one (
    this=0x3e8f8, block=true, ec=@0x23f314)
    at ../boost/asio/detail/impl/win_iocp_io_service.ipp:349
#4  0x00443954 in boost::asio::detail::win_iocp_io_service::run (
    this=0x3e8f8, ec=@0x23f314)
    at ../boost/asio/detail/impl/win_iocp_io_service.ipp:160
#5  0x00438cee in boost::asio::io_service::run (this=0x23f61c)
    at ../boost/asio/impl/io_service.ipp:57
#6  0x004061c1 in ip_tcp_socket_runtime::test ()
    at ..\libs\asio\test\ip\tcp.cpp:453
#7  0x0046873a in boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()> (this=0x23f93f, f=@0x386cc)
    at ../boost/test/utils/callback.hpp:56
#8  0x00466a63 in boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke (this=0x386c8)
    at ../boost/test/utils/callback.hpp:89
#9  0x00473065 in boost::unit_test::callback0<boost::unit_test::ut_detail::unused>::operator() (this=0x38aac) at ../boost/test/utils/callback.hpp:118
#10 0x004214c1 in operator() (this=0x34dac)
    at ../boost/test/impl/unit_test_monitor.ipp:41
#11 0x004214ab in invoke<boost::unit_test::<unnamed>::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > > (
    this=0x23f9cf, f=@0x34dac) at ../boost/test/utils/callback.hpp:42
#12 0x00421497 in invoke (this=0x34da8) at ../boost/test/utils/callback.hpp:89
#13 0x00473085 in boost::unit_test::callback0<int>::operator() (this=0x23fad4)
    at ../boost/test/utils/callback.hpp:118
#14 0x004500ad in boost::detail::do_invoke<boost::shared_ptr<boost::detail::translator_holder_base>, boost::unit_test::callback0<int> > (tr=@0x4e6540,
    F=@0x23fad4) at ../boost/test/impl/execution_monitor.ipp:253
#15 0x004204cb in boost::execution_monitor::catch_signals (this=0x4e6530,
    F=@0x23fad4) at ../boost/test/impl/execution_monitor.ipp:1129
#16 0x0042064d in boost::execution_monitor::execute (this=0x4e6530,
    F=@0x23fad4) at ../boost/test/impl/execution_monitor.ipp:1160
#17 0x004210b6 in boost::unit_test::unit_test_monitor_t::execute_and_translate
    (this=0x4e6530, tc=@0x38a80)
    at ../boost/test/impl/unit_test_monitor.ipp:69
#18 0x00460d53 in boost::unit_test::framework_impl::visit (this=0x5233c8,
    tc=@0x38a80) at ../boost/test/impl/framework.ipp:156
#19 0x00409e33 in boost::unit_test::traverse_test_tree (tc=@0x38a80,
    V=@0x5233c8) at ../boost/test/impl/unit_test_suite.ipp:193
#20 0x0040a267 in boost::unit_test::traverse_test_tree (id=65539, V=@0x5233c8)
    at ../boost/test/impl/unit_test_suite.ipp:232
#21 0x00409f70 in boost::unit_test::traverse_test_tree (suite=@0x385c8,
    V=@0x5233c8) at ../boost/test/impl/unit_test_suite.ipp:207
#22 0x0040a283 in boost::unit_test::traverse_test_tree (id=2, V=@0x5233c8)
    at ../boost/test/impl/unit_test_suite.ipp:234
#23 0x00409f70 in boost::unit_test::traverse_test_tree (suite=@0x384d8,
    V=@0x5233c8) at ../boost/test/impl/unit_test_suite.ipp:207
#24 0x0040a283 in boost::unit_test::traverse_test_tree (id=1, V=@0x5233c8)
    at ../boost/test/impl/unit_test_suite.ipp:234
#25 0x0040d9d1 in boost::unit_test::framework::run (id=1, continue_test=true)
    at ../boost/test/impl/framework.ipp:442
#26 0x00407ddd in boost::unit_test::unit_test_main (
    init_func=0x407695 <init_unit_test_suite(int, char**)>, argc=1,
    argv=0x32f08) at ../boost/test/impl/unit_test_main.ipp:185
#27 0x00407fd1 in main (argc=1, argv=0x32f08)
    at ../boost/test/impl/unit_test_main.ipp:237

Key line: ..\libs\asio\test\ip\tcp.cpp:453; The io_service::run() call after tcp::socket::cancel().

Change History (3)

comment:1 Changed 8 years ago by Richard Webb <richard.webb@…>

fwiw, I'm not seeing this issue on Mingw 4.5.1 / WinXP (see the RW_Mingw45 runer on Trunk).

comment:2 Changed 8 years ago by chris_kohlhoff

I do not think MinGW is the issue here. The VC8 jc-bell.com ip_tcp test also fails. Is this run on the same machine?

If so, I suspect that there is a non-standard (and possibly buggy) Winsock LSP (Layered Service Provider) installed on the system. Perhaps there is a firewall or some VPN software installed?. The Microsoft tool sporder.exe (included with some versions of the Windows SDK) will tell you what LSPs are installed.

comment:3 Changed 8 years ago by Jim Bell <jim@…>

Indeed they are run on the same machine. I'll investigate. Thanks for the pointer.

Note: See TracTickets for help on using tickets.