Skip to content

GetMyExternalIP hangs shutdown when waiting for response #4502

@dgenr8

Description

@dgenr8

If the GetMyExternalIP provider hasn't answered, bitcoind can't be stopped gracefully.

It looks like #3372 did not fix this, because boost interrupt() doesn't actually interrupt recv(), it just causes an exception at the next boost interruption point.

Thread in bitcoind that won't die:

(gdb) thread 6
[Switching to thread 6 (Thread 0x7f5818b7a700 (LWP 5569))]
#0  0x00007f581db6814c in recv () from /lib/x86_64-linux-gnu/libpthread.so.0
(gdb) bt
#0  0x00007f581db6814c in recv () from /lib/x86_64-linux-gnu/libpthread.so.0
#1  0x00007f581eccd213 in recv (__flags=0, __n=1, __buf=0x7f5818b79a56, __fd=23)
    at /usr/include/x86_64-linux-gnu/bits/socket2.h:45
#2  RecvLine (hSocket=23, strLine=...) at net.cpp:153
#3  0x00007f581eccd541 in GetMyExternalIP2 (addrConnect=..., 
    pszGet=0x7f581ee9dcd8 "GET / HTTP/1.1\r\nHost: checkip.dyndns.org\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\nConnection: close\r\n\r\n", pszKeyword=0x7f581ee9d976 "Address:", ipRet=...) at net.cpp:318
#4  0x00007f581eccdb14 in GetMyExternalIP (ipRet=...) at net.cpp:407
#5  0x00007f581eccdeb8 in ThreadGetMyExternalIP () at net.cpp:417
#6  0x00007f581ece128a in TraceThread<void (*)()> (name=0x7f581ee9dada "ext-ip", 
    func=0x7f581eccde90 <ThreadGetMyExternalIP()>) at util.h:544
#7  0x00007f581e111ce9 in thread_proxy () from /usr/lib/libboost_thread.so.1.46.1
#8  0x00007f581db60e9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#9  0x00007f581ca423fd in clone () from /lib/x86_64-linux-gnu/libc.so.6
#10 0x0000000000000000 in ?? ()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions