vncviewer/4.1.3 with -Log='*:stdout:100' crashes after session is closed ( Solaris )

Parthasarathy Selvaraj <[email protected]> Mon, 14 Nov 2011 16:25:34 +0530
Newsgroups gmane.network.vnc.realvnc.general
Message-ID <[email protected]>
This happens with version 4.1.3 on Solaris 10.

[partha@walle ~]$vncviewer -Log=*:stdout:100 -FullColour 
geometry=1680x1050+0+0 :2

VNC Viewer Free Edition 4.1.3 for X - built Dec  3 2008 23:03:17
Copyright (C) 2002-2008 RealVNC Ltd.
See http://www.realvnc.com for information on VNC.

Mon Sep 12 19:27:49 2011
  Config:      set FullColour(Bool) to 1
  Config:      set geometry(String) to 1680x1050+0+0
  CConn:       connected to host localhost port 5902
  CConnection: reading protocol version
  CConnection: Server supports RFB protocol version 3.8
  CConnection: Using RFB protocol version 3.8
  CConnection: processing security types message
  CConnection: Server offers security type VncAuth(2)
  CConnection: Choosing security type VncAuth(2)
  CConnection: processing security message

Mon Sep 12 19:27:51 2011
  CConnection: processing security result message
  CConnection: processing security result message
  CConnection: Authentication success!
  CConnection: reading server initialisation
  CConnection: initialisation done
  TXImage:     Using shared memory XImage
  TXImage:     Using default colormap and visual, TrueColor, depth 24.
  CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888
  CConn:       Using ZRLE encoding
  DesktopWindow: no selection (1)
  DesktopWindow: no selection (271)
  PixelBuffer: reallocating managed buffer (16x16)
  PixelBuffer: reallocating managed buffer (16x16)
  PixelBuffer: reallocating managed buffer (16x16)
  PixelBuffer: reallocating managed buffer (16x16)
  DesktopWindow: no selection (1)
  DesktopWindow: no selection (271)
  DesktopWindow: cut buffer time is 0, later 0

Mon Sep 12 19:28:19 2011
  DesktopWindow: no selection (1)
  DesktopWindow: no selection (271)
  DesktopWindow: cut buffer time is 0, later 0
Pure virtual function called
Abort (core dumped)

[partha@walle /local/cores]$pstack vncviewer___pid16113_i86pc_walle | 
/local/CBE/SunStudio/SS12/bin/c++filt

core 'vncviewer___pid16113_i86pc_walle' of 16113:       vncviewer 
-Log=*:stdout:100 -FullColour geometry=1680x1050+0+0 :1
  fef2b485 _lwp_kill (1, 6) + 15
  feed26b7 raise    (6) + 1f
  feeb1e1d abort    (80c5528, 8068b18, 8044d10, 80bb000, 8044d10, 
80887a0) + cd
  fecd6884 void __Crun::pure_error() (80c5528, 64, 80a573c, 8043d10) + 2c
  080887a0 void rfb::Logger::write(int,const char*,const char*,void*) 
(80c5528, 64, 80a573c, 80a5984, 8044d44) + 4c
  08077d44 void rfb::LogWriter::debug(const char*,...) (80c3e28, 
80a5984) + 34
  0807a590 void TXImage::destroyXImage() (843dca0) + 38
  08079d23 TXImage::~TXImage() (843dca0) + 3b
  0807abcd __SLIP.DELETER__D (843dca0, 1) + 1d
  0807ae80 TXImageCleanup::~TXImageCleanup #Nvariant 1() (80c3e98) + 40
  0807aa4b __SLIP.FINAL__B (80c3f8c, 8044f40, fef9e000, fefa3ec0, 
8044e84, feea4de2) + 1f
  feeb2569 _exithandle (80bb000, 806b636, 1, 80bb000, 8044f24, 8044f24) + 4e
  feea4de2 exit     (80451e8, 8432f70) + 12
  0807da1f void TXWindow::handleXEvent(_XEvent*) (8432f70, 8044f40) + a3
  0807cb0c void TXWindow::handleXEvents(_XDisplay*) (84248f0) + a8
  0806b76f void CConn::blockCallback() (80451e8) + 3b
  080a2c3b int 
rdr::FdInStream::readWithTimeoutOrCallback(void*,int,bool) (8433e28, 
8433e68, 2000, 1) + 1f7
  080a2a02 int rdr::FdInStream::overrun(int,int,bool) (8433e28, 1, 1, 1) 
+ d2
  0807885d main     (5, 8047220, 8047238) + 4ed
  08068ba2 ???????? (5, 804736c, 8047376, 8047388, 8047394, 80473ab)


This is due to the static order initialization/destruction fiasco 
problem. I've attached a simple fix, which should fix this problem. Can 
someone review the changes ?

--
Thanks,
Partha

_______________________________________________
VNC-List mailing list
[email protected]
To remove yourself from the list visit:
http://www.realvnc.com/mailman/listinfo/vnc-list
vncviewer.solaris.diff (text/plain, 680 B)
diff -r 622f45d3847e common/rfb/Logger_stdio.cxx
--- a/common/rfb/Logger_stdio.cxx	Thu Sep 22 21:03:27 2011 +0530
+++ b/common/rfb/Logger_stdio.cxx	Thu Sep 22 21:04:59 2011 +0530
@@ -22,11 +22,11 @@
 
 using namespace rfb;
 
-static Logger_StdIO logStdErr("stderr", stderr);
-static Logger_StdIO logStdOut("stdout", stdout);
+bool rfb::initStdIOLoggers() {
+  static Logger_StdIO *logStdErr = new Logger_StdIO("stderr", stderr);
+  static Logger_StdIO *logStdOut = new Logger_StdIO("stdout", stdout);
 
-bool rfb::initStdIOLoggers() {
-  logStdErr.registerLogger();
-  logStdOut.registerLogger();
+  logStdErr->registerLogger();
+  logStdOut->registerLogger();
   return true;
 }