TigerVNC / tigervnc

High performance, multi-platform VNC client and server
https://tigervnc.org
GNU General Public License v2.0
5.25k stars 955 forks source link

x0tigervncserver locks up frequently #1047

Open akorn opened 4 years ago

akorn commented 4 years ago

Describe the bug Intermittently, but about once every few minutes, x0tigervncserver locks up -- the network connection between existing clients and the server stays up, but no input is processed and the view is not refreshed. The server doesn't respond to new connections. IdleTimeout doesn't kick in.

To Reproduce Happens randomly, but apparently only during active use, not when the client is idle.

Client (please complete the following information):

Server (please complete the following information):

Additional context Last few lines of server output:

Wed Jun 17 16:01:46 2020
 VNCSConnST:  Key released: 0xff54 / 0xd0
 XDesktop:    116 up
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key pressed: 0xff52 / 0xc8
 XDesktop:    111 down
 VNCSConnST:  Key released: 0xff52 / 0xc8
 XDesktop:    111 up

Output stops here despite client activity.

stracing the server shows:

# strace -ff -s200 -yy -p 12791
strace: Process 12791 attached
restart_syscall(<... resuming interrupted read ...>) = 1
recvfrom(4<UNIX:[7139518->7136768]>, "[\0c-\206\3\0\0\n\0\240\10@s\v\32\0\0\202\5\0\n\36\0\0\0\0\0\200\21\240\5", 9206956, 0, NULL, NULL) = 32
recvfrom(4<UNIX:[7139518->7136768]>, 0xfe5d44, 9206924, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=4<UNIX:[7139518->7136768]>, events=POLLIN}], 1, -1) = 1 ([{fd=4, revents=POLLIN}])
recvfrom(4<UNIX:[7139518->7136768]>, "[\0c-\206\3\0\0\n\0\240\10\241]\f\32\0\0\202\5\0\n\36\0\0\0\0\0\200\21\240\5", 9206924, 0, NULL, NULL) = 32
recvfrom(4<UNIX:[7139518->7136768]>, 0xfe5d64, 9206892, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=4<UNIX:[7139518->7136768]>, events=POLLIN}], 1, -1) = 1 ([{fd=4, revents=POLLIN}])
recvfrom(4<UNIX:[7139518->7136768]>, "[\0c-\206\3\0\0\n\0\240\10\0H\r\32\0\0\202\5\0\n\36\0\0\0\0\0\200\21\240\5", 9206892, 0, NULL, NULL) = 32
recvfrom(4<UNIX:[7139518->7136768]>, 0xfe5d84, 9206860, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=4<UNIX:[7139518->7136768]>, events=POLLIN}], 1, -1) = 1 ([{fd=4, revents=POLLIN}])
recvfrom(4<UNIX:[7139518->7136768]>, "[\0c-\206\3\0\0\n\0\240\10^2\16\32\0\0\202\5\0\n\36\0\0\0\0\0\200\21\240\5", 9206860, 0, NULL, NULL) = 32
recvfrom(4<UNIX:[7139518->7136768]>, 0xfe5da4, 9206828, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=4<UNIX:[7139518->7136768]>, events=POLLIN}], 1, -1) = 1 ([{fd=4, revents=POLLIN}])
recvfrom(4<UNIX:[7139518->7136768]>, "[\0c-\206\3\0\0\n\0\240\10\300\34\17\32\0\0\202\5\0\n\36\0\0\0\0\0\200\21\240\5", 9206828, 0, NULL, NULL) = 32
recvfrom(4<UNIX:[7139518->7136768]>, 0xfe5dc4, 9206796, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=4<UNIX:[7139518->7136768]>, events=POLLIN}], 1, -1) = 1 ([{fd=4, revents=POLLIN}])
recvfrom(4<UNIX:[7139518->7136768]>, "[\0c-\206\3\0\0\n\0\240\10\36\7\20\32\0\0\202\5\0\n\36\0\0\0\0\0\200\21\240\5", 9206796, 0, NULL, NULL) = 32
recvfrom(4<UNIX:[7139518->7136768]>, 0xfe5de4, 9206764, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=4<UNIX:[7139518->7136768]>, events=POLLIN}], 1, -1) = 1 ([{fd=4, revents=POLLIN}])
recvfrom(4<UNIX:[7139518->7136768]>, "[\0c-\206\3\0\0\n\0\240\10\200\361\20\32\0\0\202\5\0\n\36\0\0\0\0\0\200\21\240\5", 9206764, 0, NULL, NULL) = 32
recvfrom(4<UNIX:[7139518->7136768]>, 0xfe5e04, 9206732, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=4<UNIX:[7139518->7136768]>, events=POLLIN}], 1, -1) = 1 ([{fd=4, revents=POLLIN}])
recvfrom(4<UNIX:[7139518->7136768]>, "[\0c-\206\3\0\0\n\0\240\10\340\333\21\32\0\0\202\5\0\n\36\0\0\0\0\0\200\21\240\5", 9206732, 0, NULL, NULL) = 32
recvfrom(4<UNIX:[7139518->7136768]>, 0xfe5e24, 9206700, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=4<UNIX:[7139518->7136768]>, events=POLLIN}], 1, -1
--- Want to back this issue? **[Post a bounty on it!](https://app.bountysource.com/issues/91779145-x0tigervncserver-locks-up-frequently?utm_campaign=plugin&utm_content=tracker%2F3557444&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://app.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F3557444&utm_medium=issues&utm_source=github).
CendioOssman commented 4 years ago

Thank you for trying to debug this. I'm afraid it's not something we've seen before.

Does the strace stop when this happens or does it continue outputting those lines?

And do you think you could attach gdb when this happens and get a backtrace for us? You probably also need to install some package with debug symbols. Unfortunately I don't know what those are called in Debian.

akorn commented 4 years ago

strace continues outputting similar lines indefinitely.

I can try gdb but I'm not very skilled in its use. For example, I don't know how to use the debug symbol packages with it; can you point me at some instructions?

CendioOssman commented 4 years ago

strace continues outputting similar lines indefinitely.

Alright. Good to know. I would assume that UNIX socket is to the X server. So it seems it is flooding it with some data. Difficult to say what though, so hopefully gdb can help.

I can try gdb but I'm not very skilled in its use. For example, I don't know how to use the debug symbol packages with it; can you point me at some instructions?

It should load the debug symbols automatically as long as they are installed.

Once the hang happens, just run gdb -p <pid of server>. Then when you get a gdb prompt just type bt full.

akorn commented 4 years ago
(gdb) bt full
#0  0x00007fc77da15b43 in poll () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#1  0x00007fc77d6ebdd3 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
No symbol table info available.
#2  0x00007fc77d6ec14f in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
No symbol table info available.
#3  0x00007fc77d6e9f8f in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
No symbol table info available.
#4  0x00007fc77d6ea411 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
No symbol table info available.
#5  0x00007fc77d6ea4a4 in xcb_writev () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
No symbol table info available.
#6  0x00007fc77e46488e in _XSend () from /usr/lib/x86_64-linux-gnu/libX11.so.6
No symbol table info available.
#7  0x00007fc77e464dbc in _XReply () from /usr/lib/x86_64-linux-gnu/libX11.so.6
No symbol table info available.
#8  0x00007fc77e44a1dc in XGetImage () from /usr/lib/x86_64-linux-gnu/libX11.so.6
No symbol table info available.
#9  0x00007fc77e44a46a in XGetSubImage () from /usr/lib/x86_64-linux-gnu/libX11.so.6
No symbol table info available.
#10 0x0000564d979f8a1c in ShmImage::get (this=<optimized out>, wnd=<optimized out>, x=<optimized out>, y=<optimized out>, w=<optimized out>, h=<optimized out>, dst_x=587, dst_y=1205) at ./unix/x0vncserver/Image.cxx:330
No locals.
#11 0x0000564d979fae3d in XPixelBuffer::grabRect (r=..., this=0x564d98a2f150) at ./common/rfb/Rect.h:108
No locals.
#12 XPixelBuffer::grabRegion (this=0x564d98a2f150, region=...) at ./unix/x0vncserver/XPixelBuffer.cxx:77
        rects = std::vector of length 14, capacity 14 = {{tl = {x = 0, y = 25}, br = {x = 2560, y = 1202}}, {tl = {x = 0, y = 1202}, br = {x = 318, y = 1203}}, {tl = {x = 583, y = 1202}, br = {x = 2560, y = 1203}}, {tl = {x = 0, y = 1203}, br = {x = 316, y = 1204}}, {tl = {x = 585, y = 1203}, br = {x = 2560,
              y = 1204}}, {tl = {x = 0, y = 1204}, br = {x = 315, y = 1205}}, {tl = {x = 586, y = 1204}, br = {x = 2560, y = 1205}}, {tl = {x = 0, y = 1205}, br = {x = 314, y = 1206}}, {tl = {x = 587, y = 1205}, br = {x = 2560, y = 1206}}, {tl = {x = 0, y = 1206}, br = {x = 313, y = 1208}}, {tl = {x = 588,
              y = 1206}, br = {x = 2560, y = 1208}}, {tl = {x = 0, y = 1208}, br = {x = 312, y = 1400}}, {tl = {x = 589, y = 1208}, br = {x = 2560, y = 1400}}, {tl = {x = 0, y = 1400}, br = {x = 2560, y = 1410}}}
        i = {tl = {x = 587, y = 1205}, br = {x = 2560, y = 1206}}
#13 0x0000564d97a0f0c7 in rfb::VNCServerST::writeUpdate (this=0x7ffd1d8ba050) at ./common/rfb/VNCServerST.cxx:796
        ui = {changed = {rgn = 0x564d98c01410}, copied = {rgn = 0x564d98a37390}, copy_delta = {x = 0, y = 0}}
        toCheck = {rgn = 0x564d98c1fc00}
        ci = non-dereferenceable iterator for std::list
        ci_next = non-dereferenceable iterator for std::list
        __PRETTY_FUNCTION__ = "void rfb::VNCServerST::writeUpdate()"
#14 0x0000564d97a0f1ea in rfb::VNCServerST::handleTimeout (this=0x7ffd1d8ba050, t=<optimized out>) at ./common/rfb/VNCServerST.cxx:614
No locals.
#15 0x0000564d97a0c18c in rfb::Timer::checkTimeouts () at ./common/rfb/Timer.cxx:71
        timer = 0x7ffd1d8ba288
        before = {tv_sec = 1594306122, tv_usec = 667682}
        start = {tv_sec = 1594306122, tv_usec = 667682}
#16 0x0000564d979f6b0e in main (argc=<optimized out>, argv=<optimized out>) at ./unix/x0vncserver/x0vncserver.cxx:363
        tv = {tv_sec = 0, tv_usec = 0}
        wfds = {fds_bits = {0 <repeats 16 times>}}
        i = <optimized out>
        wait_ms = <optimized out>
        rfds = {fds_bits = {0 <repeats 16 times>}}
        sockets = std::__cxx11::list = {[0] = 0x564d98a29730}   
        clients_connected = <optimized out>
        n = <optimized out>
        geo = {static m_geometryParam = {<rfb::VoidParameter> = {_vptr.VoidParameter = 0x564d97a5a270 <vtable for rfb::StringParameter+16>, _next = 0x0, immutable = false, name = 0x564d97a3c041 "Geometry",
              description = 0x564d97a3c098 "Screen area shown to VNC clients. Format is <width>x<height>+<offset_x>+<offset_y>, more information in man X, section GEOMETRY SPECIFICATIONS. If the argument is empty, full screen is shown to VNC cl"..., mutex = 0x564d989ef9f0}, value = 0x564d989ef930 "",
            def_value = 0x564d97a3d80f ""}, m_fullWidth = 4480, m_fullHeight = 1440, m_rect = {tl = {x = 0, y = 0}, br = {x = 4480, y = 1440}}}
        hostsData = <optimized out>
        fileTcpFilter = {<network::TcpFilter> = {<network::ConnectionFilter> = {_vptr.ConnectionFilter = 0x564d97a59a68 <vtable for FileTcpFilter+16>}, filter = std::__cxx11::list = {[0] = {action = network::TcpFilter::Reject, address = {u = {sa = {sa_family = 0, sa_data = '\000' <repeats 13 times>}, sin = {
                      sin_family = 0, sin_port = 0, sin_addr = {s_addr = 0}, sin_zero = "\000\000\000\000\000\000\000"}, sin6 = {sin6_family = 0, sin6_port = 0, sin6_flowinfo = 0, sin6_addr = {__in6_u = {__u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}},
                      sin6_scope_id = 0}}}, prefixlen = 0, mask = {u = {sa = {sa_family = 0, sa_data = '\000' <repeats 13 times>}, sin = {sin_family = 0, sin_port = 0, sin_addr = {s_addr = 0}, sin_zero = "\000\000\000\000\000\000\000"}, sin6 = {sin6_family = 0, sin6_port = 0, sin6_flowinfo = 0, sin6_addr = {
                        __in6_u = {__u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, sin6_scope_id = 0}}}}}}, fileName = 0x564d989ed7c0 "", lastModTime = 0}
        sched = {m_interval = 30, m_maxload = 35, m_initialState = false, m_passStarted = {m_timeval = {tv_sec = 1594306122, tv_usec = 363512}}, m_ratedDuration = 500, m_sleepStarted = {m_timeval = {tv_sec = 1594306122, tv_usec = 666590}}, m_sleeping = false, m_sleptThisPass = 66, m_errors = {62, 187, 448, 422,
            397, 374, 5, 8}, m_errorSum = 1903, m_errorAbsSum = 1903, m_durations = {92, 217, 478, 452, 427, 404, 35, 38}, m_durationSum = 2143, m_slept = {15, 28, 149, 186, 177, 127, 19, 2}, m_sleptSum = 703, m_idx = 6, m_count = 14}
        desktop = {<rfb::SDesktop> = {<rfb::InputHandler> = {_vptr.InputHandler = 0x564d97a59a90 <vtable for XDesktop+16>}, <No data fields>}, <TXGlobalEventHandler> = {_vptr.TXGlobalEventHandler = 0x564d97a59b20 <vtable for XDesktop+160>}, <QueryResultCallback> = {
            _vptr.QueryResultCallback = 0x564d97a59b38 <vtable for XDesktop+184>}, dpy = 0x564d98a0b2e0, geometry = 0x7ffd1d8b9fe0, pb = 0x564d98a2f150, server = 0x7ffd1d8ba050, queryConnectDialog = 0x0, queryConnectSock = 0x0, oldButtonMask = 0, haveXtest = true, haveDamage = true, maxButtons = 8,
          pressedKeys = std::map with 0 elements, running = true, damage = 69206026, xdamageEventBase = 91, xkbEventBase = 85, xfixesEventBase = 87, xrandrEventBase = 89, outputIdMap = std::map with 2 elements = {[770] = 1804289383, [772] = 846930886}, randrSyncSerial = 0, ledMasks = {4, 2, 1}, ledState = 2,
          codeMap = 0x564d97a3c400 <code_map_qnum_to_xorgevdev>, codeMapLen = 254}
        server = {<rfb::VNCServer> = {<rfb::UpdateTracker> = {_vptr.UpdateTracker = 0x564d97a5a608 <vtable for rfb::VNCServerST+16>}, <network::SocketServer> = {_vptr.SocketServer = 0x564d97a5a6f0 <vtable for rfb::VNCServerST+248>}, <No data fields>}, <rfb::Timer::Callback> = {
            _vptr.Callback = 0x564d97a5a738 <vtable for rfb::VNCServerST+320>}, blacklist = {blm = std::map with 0 elements}, blHosts = 0x7ffd1d8ba068, desktop = 0x7ffd1d8ba470, desktopStarted = true, blockCounter = 0, pb = 0x564d98a2f150, screenLayout = {screens = std::__cxx11::list = {[0] = {id = 1804289383,
                dimensions = {tl = {x = 2560, y = 360}, br = {x = 4480, y = 1440}}, flags = 0}, [1] = {id = 846930886, dimensions = {tl = {x = 0, y = 0}, br = {x = 2560, y = 1440}}, flags = 0}}}, ledState = 2, name = {buf = 0x564d98a2a820 "x0vncserver"}, clients = std::__cxx11::list = {[0] = 0x564d98a36c80},
          pointerClient = 0x0, clipboardClient = 0x0, clipboardRequestors = empty std::__cxx11::list, closingSockets = empty std::__cxx11::list, comparer = 0x564d98bd8800, cursorPos = {x = 818, y = 1439}, cursor = 0x564d98bd8690, renderedCursor = {<rfb::PixelBuffer> = {
              _vptr.PixelBuffer = 0x564d97a5a800 <vtable for rfb::RenderedCursor+16>, format = {bpp = 32, depth = 24, trueColour = true, bigEndian = false, redMax = 255, greenMax = 255, blueMax = 255, redShift = 16, greenShift = 8, blueShift = 0, redBits = 8, greenBits = 8, blueBits = 8, maxBits = 8, minBits = 8,
                endianMismatch = false,
                static upconvTable = "\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377"..., static downconvTable = <same as static member of an already seen type>,
                static _init = {<No data fields>}}, width_ = 4480, height_ = 1440}, buffer = {<rfb::FullFramePixelBuffer> = {<rfb::ModifiablePixelBuffer> = {<rfb::PixelBuffer> = {_vptr.PixelBuffer = 0x564d97a5a520 <vtable for rfb::ManagedPixelBuffer+16>, format = {bpp = 32, depth = 24, trueColour = true,
                      bigEndian = false, redMax = 255, greenMax = 255, blueMax = 255, redShift = 16, greenShift = 8, blueShift = 0, redBits = 8, greenBits = 8, blueBits = 8, maxBits = 8, minBits = 8, endianMismatch = false,
                      static upconvTable = "\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377\000\377"..., static downconvTable = <same as static member of an already seen type>, 
                      static _init = {<No data fields>}}, width_ = 15, height_ = 21}, <No data fields>}, data = 0x564d98bf5330 "\r\r\t", stride = 15}, data_ = 0x564d98bf5330 "\r\r\t", datasize = 1260}, offset = {x = 957, y = 585}}, renderedCursorInvalid = true, 
          keyRemapper = 0x564d97a5e2c0 <rfb::KeyRemapper::defInstance>, idleTimer = {dueTime = {tv_sec = 15481355650793524, tv_usec = 12103604389871656}, timeoutMs = 2949164, cb = 0x7ffd1d8ba060, static pending = {<std::__cxx11::_List_base<rfb::Timer*, std::allocator<rfb::Timer*> >> = {
                _M_impl = {<std::allocator<std::_List_node<rfb::Timer*> >> = {<__gnu_cxx::new_allocator<std::_List_node<rfb::Timer*> >> = {<No data fields>}, <No data fields>}, _M_node = {<std::__detail::_List_node_base> = {_M_next = 0x564d98bf59e0, _M_prev = 0x564d98a2fdd0}, _M_size = 3}}}, <No data fields>}}, 
          disconnectTimer = {dueTime = {tv_sec = 10977687302897700, tv_usec = 7599936041975832}, timeoutMs = 1900572, cb = 0x7ffd1d8ba060, static pending = {<std::__cxx11::_List_base<rfb::Timer*, std::allocator<rfb::Timer*> >> = {
                _M_impl = {<std::allocator<std::_List_node<rfb::Timer*> >> = {<__gnu_cxx::new_allocator<std::_List_node<rfb::Timer*> >> = {<No data fields>}, <No data fields>}, _M_node = {<std::__detail::_List_node_base> = {_M_next = 0x564d98bf59e0, _M_prev = 0x564d98a2fdd0}, _M_size = 3}}}, <No data fields>}}, 
          connectTimer = {dueTime = {tv_sec = 0, tv_usec = -1}, timeoutMs = -256, cb = 0x7ffd1d8ba060, static pending = {<std::__cxx11::_List_base<rfb::Timer*, std::allocator<rfb::Timer*> >> = {
                _M_impl = {<std::allocator<std::_List_node<rfb::Timer*> >> = {<__gnu_cxx::new_allocator<std::_List_node<rfb::Timer*> >> = {<No data fields>}, <No data fields>}, _M_node = {<std::__detail::_List_node_base> = {_M_next = 0x564d98bf59e0, _M_prev = 0x564d98a2fdd0}, _M_size = 3}}}, <No data fields>}}, 
          frameTimer = {dueTime = {tv_sec = 1594306122, tv_usec = 666743}, timeoutMs = 16, cb = 0x7ffd1d8ba060, static pending = {<std::__cxx11::_List_base<rfb::Timer*, std::allocator<rfb::Timer*> >> = {
                _M_impl = {<std::allocator<std::_List_node<rfb::Timer*> >> = {<__gnu_cxx::new_allocator<std::_List_node<rfb::Timer*> >> = {<No data fields>}, <No data fields>}, _M_node = {<std::__detail::_List_node_base> = {_M_next = 0x564d98bf59e0, _M_prev = 0x564d98a2fdd0}, _M_size = 3}}}, <No data fields>}}}
        dpy = 0x564d98a0b2e0
        dpyStr = {buf = 0x564d989ecb80 ""}
        listeners = std::__cxx11::list = {[0] = 0x564d98a2aa60, [1] = 0x564d98a2e640}

This is with 38726ce083db1a9227325bf87989513499bfa698.

CendioOssman commented 4 years ago

Hm... that trace shows it in the middle of sending an update and seems to be working just fine.

Could this be a client issue? Have you tried more than one client?

akorn commented 4 years ago

It can't be purely a client issue because while it's happening I can't connect another client and because the client is not dropped due to IdleTimeout.

I haven't yet tried having several clients attached simultaneously to see if it locks up for all of them.

CendioOssman commented 4 years ago

Alright, let's try this; Do the gdb thing again. But after the bt run the command finish. It will wait for the current function to exit and then print a line once it is done. Do that as many times as you can and let us know where it stops.

balwierz commented 4 years ago

(Deleted)

CendioOssman commented 4 years ago

I'm afraid that is an entirely different issue as your trace is in code specific to Xvnc. Please file a new entry here on Github with your details. Also please remove/edit your comment here so we can avoid things that aren't related to the original issue.