Bug 4327 - vncviewer crashes on very slow connections
Summary: vncviewer crashes on very slow connections
Status: CLOSED FIXED
Alias: None
Product: ThinLinc
Classification: Unclassified
Component: VNC (show other bugs)
Version: 3.4.0
Hardware: PC Unknown
: P2 Normal
Target Milestone: 4.0.0
Assignee: Aaron Sowry
URL:
Keywords: ossman_tester
Depends on:
Blocks: 4536
  Show dependency treegraph
 
Reported: 2012-06-07 12:53 CEST by Peter Åstrand
Modified: 2013-02-07 09:27 CET (History)
0 users

See Also:
Acceptance Criteria:


Attachments

Comment 1 Aaron Sowry cendio 2012-06-19 16:27:34 CEST
Can reproduce this fairly reliably (3.4.0 64-bit Linux client) using bandwidth throttling.
Comment 2 Aaron Sowry cendio 2012-07-16 16:08:44 CEST
Log from error "zero size rect:

---
2012-07-16T15:36:28: vncviewer pid is 8909
2012-07-16T15:36:28: vncviewer: 
2012-07-16T15:36:28: vncviewer: ThinLinc Client 64-bit v3.4.0post (20120716)
2012-07-16T15:36:28: vncviewer: Built on Jul 16 2012 at 13:01:07
2012-07-16T15:36:28: vncviewer: Copyright (C) 1999-2011 TigerVNC Team and many others
2012-07-16T15:36:28: vncviewer: See included EULA.txt for licensing details.
2012-07-16T15:36:28: vncviewer: See http://www.cendio.com for information on ThinLinc.
2012-07-16T15:36:28: vncviewer: 
2012-07-16T15:36:28: vncviewer: Mon Jul 16 15:36:28 2012
2012-07-16T15:36:28: vncviewer:  CConn:       connected to host 127.0.0.1 port 35131
2012-07-16T15:36:28: unfsd: UNFS3 unfsd 0.9.20 (C) 2006, Pascal Schmidt <unfs3-server@ewetel.net>
2012-07-16T15:36:28: unfsd: /media/cdrom: ip 127.0.0.1 mask 255.255.255.255 options 24
2012-07-16T15:36:28: vncviewer:  CConnection: Server supports RFB protocol version 3.8
2012-07-16T15:36:28: vncviewer:  CConnection: Using RFB protocol version 3.8
2012-07-16T15:36:28: pulseaudio: W: alsa-util.c: Cannot find mixer control "PCM".
2012-07-16T15:36:28: pulseaudio: E: oss-util.c: open('/dev/dsp'): No such file or directory
2012-07-16T15:36:28: pulseaudio: E: module.c: Failed to load  module "module-oss" (argument: ""): initialization failed.
2012-07-16T15:36:28: pulseaudio: E: main.c: Module load failed.
2012-07-16T15:36:28: vncviewer:  PlatformPixelBuffer: Using default colormap and visual, TrueColor, depth 24.
2012-07-16T15:36:28: vncviewer:  CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888
2012-07-16T15:36:28: vncviewer:  CConn:       Using Tight encoding
2012-07-16T15:36:28: vncviewer:  CConn:       Enabling continuous updates
2012-07-16T15:36:54: vncviewer: 
2012-07-16T15:36:54: vncviewer: Mon Jul 16 15:36:54 2012
2012-07-16T15:36:54: vncviewer:  CConn:       Throughput 277 kbit/s - changing to quality 6
2012-07-16T15:36:54: vncviewer:  CConn:       Using Tight encoding
2012-07-16T15:37:03: vncviewer: 
2012-07-16T15:37:03: vncviewer: Mon Jul 16 15:37:03 2012
2012-07-16T15:37:03: vncviewer:  CConn:       Throughput 229 kbit/s - full color is now disabled
2012-07-16T15:37:06: vncviewer: 
2012-07-16T15:37:06: vncviewer: Mon Jul 16 15:37:06 2012
2012-07-16T15:37:06: vncviewer:  CConn:       Using pixel format depth 8 (8bpp) color-map
2012-07-16T15:37:07: vncviewer: 
2012-07-16T15:37:07: vncviewer: Mon Jul 16 15:37:07 2012
2012-07-16T15:37:07: vncviewer:  CConn:       Throughput 272 kbit/s - full color is now enabled
2012-07-16T15:37:10: vncviewer: 
2012-07-16T15:37:10: vncviewer: Mon Jul 16 15:37:10 2012
2012-07-16T15:37:10: vncviewer:  CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888
2012-07-16T15:37:10: vncviewer: Warning: zero size rect
2012-07-16T15:37:10: Process 8909 killed by signal 11
2012-07-16T15:37:10: Log file ended
---

Backtrace:

---
$ gdb /opt/thinlinc/lib/tlclient/vncviewer ./core.8909
GNU gdb (GDB) Fedora (7.4.50.20120120-49.fc17)
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /opt/thinlinc/lib/tlclient/vncviewer...Reading symbols from /usr/lib/debug/opt/thinlinc/lib/tlclient/vncviewer.debug...done.
done.
[New LWP 8909]
Core was generated by `/opt/thinlinc/lib/tlclient/vncviewer -RemoteResize=1 -FullScreen -FullScreenAll'.
Program terminated with signal 11, Segmentation fault.
#0  rfb::CMsgReader::readRect (this=0xfb38b0, r=..., encoding=-255)
    at /home/aaron/ThinLinc/ctc/buildarea/BUILD/thinlinc-client/tigervnc/common/rfb/CMsgReader.cxx:115
115 /home/aaron/ThinLinc/ctc/buildarea/BUILD/thinlinc-client/tigervnc/common/rfb/CMsgReader.cxx: No such file or directory.
Missing separate debuginfos, use: debuginfo-install thinlinc-client-3.4.0post-3564.x86_64
(gdb) bt
#0  rfb::CMsgReader::readRect (this=0xfb38b0, r=..., encoding=-255)
    at /home/aaron/ThinLinc/ctc/buildarea/BUILD/thinlinc-client/tigervnc/common/rfb/CMsgReader.cxx:115
#1  0x0000000000457bcd in rfb::CMsgReaderV3::readMsg (this=0xfb38b0)
    at /home/aaron/ThinLinc/ctc/buildarea/BUILD/thinlinc-client/tigervnc/common/rfb/CMsgReaderV3.cxx:96
#2  0x000000000044bf40 in CConn::socketEvent (fd=<optimized out>, data=0xfb47c0)
    at /home/aaron/ThinLinc/ctc/buildarea/BUILD/thinlinc-client/tigervnc/vncviewer/CConn.cxx:223
#3  0x00000000004afebf in fl_wait(double) ()
#4  0x000000000049813a in Fl::wait(double) ()
#5  0x00000000004557de in main (argc=16, argv=<optimized out>)
    at /home/aaron/ThinLinc/ctc/buildarea/BUILD/thinlinc-client/tigervnc/vncviewer/vncviewer.cxx:424
---

This was achieved with a nightly build against tl.cendio.se, on a ~3Mb/s connection.
Comment 3 Aaron Sowry cendio 2012-07-16 16:15:23 CEST
Log from error "unknown message type":

---
2012-07-16T16:11:34: vncviewer pid is 9268
2012-07-16T16:11:34: vncviewer: 
2012-07-16T16:11:34: vncviewer: ThinLinc Client 64-bit v3.4.0post (20120716)
2012-07-16T16:11:34: vncviewer: Built on Jul 16 2012 at 13:01:07
2012-07-16T16:11:34: vncviewer: Copyright (C) 1999-2011 TigerVNC Team and many others
2012-07-16T16:11:34: vncviewer: See included EULA.txt for licensing details.
2012-07-16T16:11:34: vncviewer: See http://www.cendio.com for information on ThinLinc.
2012-07-16T16:11:34: unfsd: UNFS3 unfsd 0.9.20 (C) 2006, Pascal Schmidt <unfs3-server@ewetel.net>
2012-07-16T16:11:34: unfsd: /media/cdrom: ip 127.0.0.1 mask 255.255.255.255 options 24
2012-07-16T16:11:34: vncviewer: 
2012-07-16T16:11:34: vncviewer: Mon Jul 16 16:11:34 2012
2012-07-16T16:11:34: vncviewer:  CConn:       connected to host 127.0.0.1 port 54485
2012-07-16T16:11:34: vncviewer:  CConnection: Server supports RFB protocol version 3.8
2012-07-16T16:11:34: vncviewer:  CConnection: Using RFB protocol version 3.8
2012-07-16T16:11:34: pulseaudio: W: alsa-util.c: Cannot find mixer control "PCM".
2012-07-16T16:11:34: pulseaudio: E: oss-util.c: open('/dev/dsp'): No such file or directory
2012-07-16T16:11:34: pulseaudio: E: module.c: Failed to load  module "module-oss" (argument: ""): initialization failed.
2012-07-16T16:11:34: pulseaudio: E: main.c: Module load failed.
2012-07-16T16:11:34: vncviewer:  PlatformPixelBuffer: Using default colormap and visual, TrueColor, depth 24.
2012-07-16T16:11:34: vncviewer:  CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888
2012-07-16T16:11:34: vncviewer:  CConn:       Using Tight encoding
2012-07-16T16:11:34: vncviewer:  CConn:       Enabling continuous updates
2012-07-16T16:11:34: vncviewer:  PlatformPixelBuffer: Using default colormap and visual, TrueColor, depth 24.
2012-07-16T16:11:34: vncviewer:  DesktopWindow: Failure grabbing mouse
2012-07-16T16:11:35: Last line was repeated 1 time(s).
2012-07-16T16:11:35: vncviewer: 
2012-07-16T16:11:35: vncviewer: Mon Jul 16 16:11:35 2012
2012-07-16T16:11:35: vncviewer:  DesktopWindow: Failure grabbing mouse
2012-07-16T16:11:36: Last line was repeated 1 time(s).
2012-07-16T16:11:36: vncviewer: 
2012-07-16T16:11:36: vncviewer: Mon Jul 16 16:11:36 2012
2012-07-16T16:11:36: vncviewer:  DesktopWindow: Failure grabbing mouse
2012-07-16T16:11:37: Last line was repeated 1 time(s).
2012-07-16T16:11:37: vncviewer: 
2012-07-16T16:11:37: vncviewer: Mon Jul 16 16:11:37 2012
2012-07-16T16:11:37: vncviewer:  DesktopWindow: Failure grabbing mouse
2012-07-16T16:11:38: Last line was repeated 1 time(s).
2012-07-16T16:11:38: vncviewer: 
2012-07-16T16:11:38: vncviewer: Mon Jul 16 16:11:38 2012
2012-07-16T16:11:38: vncviewer:  DesktopWindow: Failure grabbing mouse
2012-07-16T16:11:39: Last line was repeated 1 time(s).
2012-07-16T16:11:39: vncviewer: 
2012-07-16T16:11:39: vncviewer: Mon Jul 16 16:11:39 2012
2012-07-16T16:11:39: vncviewer:  DesktopWindow: Failure grabbing mouse
2012-07-16T16:11:46: vncviewer: 
2012-07-16T16:11:46: vncviewer: Mon Jul 16 16:11:46 2012
2012-07-16T16:11:46: vncviewer:  CConn:       Throughput 213 kbit/s - changing to quality 6
2012-07-16T16:11:46: vncviewer:  CConn:       Throughput 213 kbit/s - full color is now disabled
2012-07-16T16:11:48: vncviewer: 
2012-07-16T16:11:48: vncviewer: Mon Jul 16 16:11:48 2012
2012-07-16T16:11:48: vncviewer:  CConn:       Using pixel format depth 8 (8bpp) color-map
2012-07-16T16:11:48: vncviewer:  CConn:       Using Tight encoding
2012-07-16T16:11:59: vncviewer: unknown message type 232
Comment 4 Aaron Sowry cendio 2012-07-16 16:19:26 CEST
Log from error "rect too big":

---
2012-07-16T16:16:50: vncviewer pid is 9312
2012-07-16T16:16:50: vncviewer: 
2012-07-16T16:16:50: vncviewer: ThinLinc Client 64-bit v3.4.0post (20120716)
2012-07-16T16:16:50: vncviewer: Built on Jul 16 2012 at 13:01:07
2012-07-16T16:16:50: vncviewer: Copyright (C) 1999-2011 TigerVNC Team and many others
2012-07-16T16:16:50: vncviewer: See included EULA.txt for licensing details.
2012-07-16T16:16:50: vncviewer: See http://www.cendio.com for information on ThinLinc.
2012-07-16T16:16:50: vncviewer: 
2012-07-16T16:16:50: vncviewer: Mon Jul 16 16:16:50 2012
2012-07-16T16:16:50: vncviewer:  CConn:       connected to host 127.0.0.1 port 44231
2012-07-16T16:16:50: vncviewer:  CConnection: Server supports RFB protocol version 3.8
2012-07-16T16:16:50: vncviewer:  CConnection: Using RFB protocol version 3.8
2012-07-16T16:16:50: pulseaudio: W: alsa-util.c: Cannot find mixer control "PCM".
2012-07-16T16:16:50: vncviewer:  PlatformPixelBuffer: Using default colormap and visual, TrueColor, depth 24.
2012-07-16T16:16:50: vncviewer:  CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888
2012-07-16T16:16:50: vncviewer:  CConn:       Using Tight encoding
2012-07-16T16:16:50: pulseaudio: E: oss-util.c: open('/dev/dsp'): No such file or directory
2012-07-16T16:16:50: pulseaudio: E: module.c: Failed to load  module "module-oss" (argument: ""): initialization failed.
2012-07-16T16:16:50: pulseaudio: E: main.c: Module load failed.
2012-07-16T16:17:12: vncviewer: 
2012-07-16T16:17:12: vncviewer: Mon Jul 16 16:17:12 2012
2012-07-16T16:17:12: vncviewer:  CConn:       Throughput 240 kbit/s - changing to quality 6
2012-07-16T16:17:12: vncviewer:  CConn:       Throughput 240 kbit/s - full color is now disabled
2012-07-16T16:17:12: vncviewer:  CConn:       Enabling continuous updates
2012-07-16T16:17:15: vncviewer: 
2012-07-16T16:17:15: vncviewer: Mon Jul 16 16:17:15 2012
2012-07-16T16:17:15: vncviewer:  CConn:       Using pixel format depth 8 (8bpp) color-map
2012-07-16T16:17:15: vncviewer:  CConn:       Using Tight encoding
2012-07-16T16:17:23: vncviewer: 
2012-07-16T16:17:23: vncviewer: Mon Jul 16 16:17:23 2012
2012-07-16T16:17:23: vncviewer:  CConn:       Throughput 271 kbit/s - full color is now enabled
2012-07-16T16:17:24: vncviewer: 
2012-07-16T16:17:24: vncviewer: Mon Jul 16 16:17:24 2012
2012-07-16T16:17:24: vncviewer:  CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888
2012-07-16T16:17:30: vncviewer: 
2012-07-16T16:17:30: vncviewer: Mon Jul 16 16:17:30 2012
2012-07-16T16:17:30: vncviewer:  CConn:       Throughput 209 kbit/s - full color is now disabled
2012-07-16T16:17:33: vncviewer: 
2012-07-16T16:17:33: vncviewer: Mon Jul 16 16:17:33 2012
2012-07-16T16:17:33: vncviewer:  CConn:       Using pixel format depth 8 (8bpp) color-map
2012-07-16T16:17:36: vncviewer: Rect too big: 276x69 at 37038,805 exceeds 1024x768
2012-07-16T16:17:36: vncviewer: 
2012-07-16T16:17:36: vncviewer: Mon Jul 16 16:17:36 2012
2012-07-16T16:17:36: vncviewer:  CConn:       Rect too big
2012-07-16T16:17:41: Process 9312 exited with code 0
2012-07-16T16:17:42: Log file ended
Comment 5 Aaron Sowry cendio 2012-07-19 10:46:56 CEST
(In reply to comment #2)
> Log from error "zero size rect:

This segfault is caused whenever a negative encoding value is encountered. The first step is to stop the client segfaulting when this happens, and the second step is to find out why we are getting negative encoding values from the server in the first place.
Comment 6 Aaron Sowry cendio 2012-07-19 17:12:51 CEST
(In reply to comment #5)
> (In reply to comment #2)
> > Log from error "zero size rect:
> 
> This segfault is caused whenever a negative encoding value is encountered. The
> first step is to stop the client segfaulting when this happens

A patch has been committed upstream and will be pulled in with the next

> find out why we are getting negative encoding values from the server
> in the first place.

The reason that this manifests itself over limited bandwidth is because in this situation, the pixel depth is switching between back and forth between low and high colour all the time. If this pixel depth is not in sync between the client and server, then the server may, for example, send a 24-bit cursor update while the client is only reading the data for an 8-bit cursor update. This leaves extra rubbish in the pipe, which is interpreted as bad data on the next read.

In this case the error is in fact in the cursor update code.
Comment 7 Pierre Ossman cendio 2012-07-20 12:51:40 CEST
Problem was a bug in the fence code. The client uses fences to determine when the server has properly switched pixel formats. Unfortunately the server sent out the fence response too early, creating a small window where the client has switched to the new pixel format, but the server still uses the old one.

Fixed in r25518.
Comment 8 Pierre Ossman cendio 2012-10-18 14:13:03 CEST
Works on 200 ms RTT/50 kbps.
Comment 9 Aaron Sowry cendio 2012-12-16 21:18:19 CET
Still getting this problem (both "Zlib: Inflate failed" and "rect too big") from the other side of the world on a 256kb/~370ms connection. Leaving bug closed for now though, until we can reproduce it without having to fly to New Zealand.
Comment 10 Peter Åstrand cendio 2013-02-07 09:27:05 CET
(In reply to comment #9)
> Still getting this problem (both "Zlib: Inflate failed" and "rect too big")
> from the other side of the world on a 256kb/~370ms connection. Leaving bug
> closed for now though, until we can reproduce it without having to fly to New
> Zealand.

Continuing on bug 4536.

Note You need to log in before you can comment on or make changes to this bug.