Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Jun 2014 16:29:26 +0200
From:      =?UTF-8?Q?Bernhard_Fr=C3=B6hlich?= <decke@FreeBSD.org>
To:        Ron Thomas <ron@vopenhouse.ca>
Cc:        "freebsd-emulation@freebsd.org" <freebsd-emulation@freebsd.org>
Subject:   Re: FreeBSD Port: emulators/virtualbox-ose
Message-ID:  <CAE-m3X2Lo0o_Ka%2BsCGNPxVa2sCzsOfKfSJaHyQZDkhv04BvHLw@mail.gmail.com>
In-Reply-To: <CAHf5H2k3WEAuV=G5rUvdcwUBWK6KcPRcTcYhW-9-zTvoB0k=Lw@mail.gmail.com>
References:  <CAHf5H2n6NRcKNBtwCn_PU6bhPoMoyc_4uUMG0G=8XPCN6d2BsQ@mail.gmail.com> <CAHf5H2k3WEAuV=G5rUvdcwUBWK6KcPRcTcYhW-9-zTvoB0k=Lw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jun 12, 2014 at 3:17 AM, Ron Thomas <ron@vopenhouse.ca> wrote:
> Not sure if this is the right venue for this, if not, could you point me in
> the right direction?

You're absolutely at the right place.

> VBoxHeadless crashes on VNC disconnect. Every time I close a VNC session
> VBoxHeadless crashes.  I am starting VirtualBox using "service vboxheadless
> start"
>
> #uname -a
> FreeBSD my.domain.com 9.2-RELEASE-p6 FreeBSD 9.2-RELEASE-p6 #0: Tue May 13
> 08:21:53 UTC 2014
> root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC
> amd64
>
> #pkg version | grep 'virtualbox'
> virtualbox-ose-4.3.12_1            =
> virtualbox-ose-kmod-4.3.12         =
>
> Installed with following options:
> DBUS
> DEBUG
> GUESTADDITIONS
> PYTHON
> UDPTUNNEL
> VNC
>
>
> (gdb) backtrace
> #0  0x0000000805963e48 in ConsoleVRDPServer::AuthDisconnect
> (this=0x805013f00, uuid=@0x7ffffeeb3ce0, u32ClientId=4294967295) at
> /usr/ports/emulators/virtualbox-ose/work/VirtualBox-4.3.12/src/VBox/Main/src-client/ConsoleVRDPServer.cpp:3339
> #1  0x0000000805919ddb in Console::VRDPClientDisconnect (this=0x805095800,
> u32ClientId=4294967295, fu32Intercepted=0) at
> /usr/ports/emulators/virtualbox-ose/work/VirtualBox-4.3.12/src/VBox/Main/src-client/ConsoleImpl.cpp:1411
> #2  0x000000080596962c in ConsoleVRDPServer::VRDPCallbackIntercept
> (pvCallback=0x805013f00, u32ClientId=4294967295, fu32Intercept=0,
> ppvIntercept=0x80596962c)
>     at
> /usr/ports/emulators/virtualbox-ose/work/VirtualBox-4.3.12/src/VBox/Main/src-client/ConsoleVRDPServer.cpp:1016
> #3  0x00000008084014c0 in VNCServerImpl::clientGoneHook (cl=0x80a078000) at
> /usr/ports/emulators/virtualbox-ose/work/VirtualBox-4.3.12/src/VBox/ExtPacks/VNC/VBoxVNC.cpp:1294
> #4  0x00000008086178f8 in rfbClientConnectionGone () from
> /usr/local/lib/libvncserver.so.0
> #5  0x0000000808611dec in clientInput () from
> /usr/local/lib/libvncserver.so.0
> #6  0x0000000800829d34 in pthread_getprio () from /lib/libthr.so.3
> #7  0x0000000000000000 in ?? ()

The stacktrace looks very much like a bug in libvncserver. There is no
information passed to
libvncserver that makes me believe that the passed data is wrong so I
guess it this is nothing
that VBox can fix.

https://www.virtualbox.org/browser/vbox/trunk/src/VBox/ExtPacks/VNC/VBoxVNC.cpp#L1297

It might be worth trying to recompile libvncserver port with debug
options to get a full stacktrace
but it is somewhere here:

https://github.com/LibVNC/libvncserver/blob/79e68d065004b24811d68e211c27b918654aabed/libvncserver/main.c#L509

and the patch that we have in our libvncserver port looks quite like
it fixes a similar issue in
another place to me

http://svnweb.freebsd.org/ports/head/net/libvncserver/files/patch-libvncserver__sockets.c?revision=340725&view=markup

so my first idea would be to do something like that to libvncserver:


--- main.c.orig    2014-06-12 16:20:35.163489814 +0200
+++ main.c    2014-06-12 16:22:00.598491327 +0200
@@ -546,10 +546,10 @@
         }

         /* We have some space on the transmit queue, send some data */
-        if (FD_ISSET(cl->sock, &wfds))
+        if (cl->sock >= 0 && FD_ISSET(cl->sock, &wfds))
             rfbSendFileTransferChunk(cl);

-        if (FD_ISSET(cl->sock, &rfds) || FD_ISSET(cl->sock, &efds))
+        if (cl->sock >= 0 && (FD_ISSET(cl->sock, &rfds) ||
FD_ISSET(cl->sock, &efds)))
             rfbProcessClientMessage(cl);
     }


This patch is completely untested was produced within 2 minutes of
looking at the code and
I am not familiar with the VNC code at all so this might be completely
nonsense - please take
it for what it's worth.

Since the libvncserver port is unmaintained right now but bapt@ was
the former maintainer I
will CC him just in case he knows something about it.

-- 
Bernhard Froehlich
http://www.bluelife.at/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAE-m3X2Lo0o_Ka%2BsCGNPxVa2sCzsOfKfSJaHyQZDkhv04BvHLw>