VirtualBox

Ticket #4157 (closed defect: fixed)

Opened 5 years ago

Last modified 4 years ago

Hang under VBoxGlobal::documentsPath because QDir::cdUp isn't checked for failure => Fixed in SVN

Reported by: timeless Owned by:
Priority: major Component: GUI
Version: VirtualBox 2.2.4 Keywords:
Cc: Guest type: other
Host type: Mac OS X

Description

Mac OS X 10.5.7, ZFS /Users/timeless (among others) [=home directory]

Steps:

  1. run virtualbox
  2. select file>Import Appliance

actual results: VirtualBox.app burns cpu until I realize it's killing my battery.

I don't have a Guest yet, I was trying to import a QNX VMWare file (just for kicks). But it seems clear that this won't work on my system (I don't need the file, I was just curious).

(gdb) bt
#0  0x95a262c2 in lstat ()
#1  0x010dc090 in QFSFileEnginePrivate::isSymlink ()
#2  0x010dddbe in QFSFileEngine::fileFlags ()
#3  0x0108937b in QDir::exists ()
#4  0x003b99d0 in VBoxGlobal::documentsPath ()
#5  0x004aca73 in VBoxImportApplianceWzd::VBoxImportApplianceWzd ()
#6  0x003f2dfa in VBoxSelectorWnd::fileImportAppliance ()
#7  0x004b8b27 in VBoxSelectorWnd::qt_metacall ()
#8  0x011113f0 in QMetaObject::activate ()
#9  0x0124acac in QAction::triggered ()
#10 0x0124c82f in QAction::activate ()
#11 0x016cbf19 in qt_mac_activate_action ()
#12 0x016cc529 in qt_mac_menu_event ()
#13 0x905cb11d in DispatchEventToHandlers ()
#14 0x905ca55b in SendEventToEventTargetInternal ()
#15 0x905e6eac in SendEventToEventTarget ()
#16 0x9061b1c7 in SendHICommandEvent ()
#17 0x90641939 in SendMenuCommandWithContextAndModifiers ()
#18 0x906418f4 in SendMenuItemSelectedEvent ()
#19 0x9064180a in FinishMenuSelection ()
#20 0x9061e474 in MenuSelectCore ()
#21 0x906ad030 in MenuSelect ()
#22 0x012ac2f2 in QApplicationPrivate::globalEventProcessor ()
#23 0x905cb11d in DispatchEventToHandlers ()
#24 0x905ca55b in SendEventToEventTargetInternal ()
#25 0x905e6eac in SendEventToEventTarget ()
#26 0x905f95e3 in ToolboxEventDispatcherHandler ()
#27 0x905cb4d6 in DispatchEventToHandlers ()
#28 0x905ca55b in SendEventToEventTargetInternal ()
#29 0x905e6eac in SendEventToEventTarget ()
#30 0x012a5401 in qt_mac_send_event ()
#31 0x012b3a42 in QEventDispatcherMac::processEvents ()
#32 0x010ff2a1 in QEventLoop::processEvents ()
#33 0x010ff36d in QEventLoop::exec ()
#34 0x01103301 in QCoreApplication::exec ()
#35 0x003a3623 in TrustedMain ()
#36 0x0000374c in SUPR3HardenedMain ()
#37 0x00002be1 in main ()
(gdb) finish
Run till exit from #0  0x95a262c2 in lstat ()
0x010dc090 in QFSFileEnginePrivate::isSymlink ()
(gdb) 
Run till exit from #0  0x010dc090 in QFSFileEnginePrivate::isSymlink ()
0x010dddbe in QFSFileEngine::fileFlags ()
(gdb) 
Run till exit from #0  0x010dddbe in QFSFileEngine::fileFlags ()
0x0108937b in QDir::exists ()
(gdb) 
Run till exit from #0  0x0108937b in QDir::exists ()
0x003b99d0 in VBoxGlobal::documentsPath ()
(gdb) 
Run till exit from #0  0x003b99d0 in VBoxGlobal::documentsPath ()
^C
Program received signal SIGINT, Interrupt.
0x95a01312 in stat ()
(gdb) bt
#0  0x95a01312 in stat ()
#1  0x010dbf95 in QFSFileEnginePrivate::doStat ()
#2  0x010dda56 in QFSFileEngine::fileFlags ()
#3  0x010979e1 in QFileInfoPrivate::getFileFlags ()
#4  0x01097d8c in QFileInfo::exists ()
#5  0x010902d0 in QDir::cd ()
#6  0x010907fd in QDir::cdUp ()
#7  0x003b99c8 in VBoxGlobal::documentsPath ()
....

So. I'm aware that this is mostly a bug between Qt and zfs, but this is the only application I have which triggers an infinite loop.

timeless-mbp:~ timeless$ df
Filesystem                                                            512-blocks      Used Available Capacity  Mounted on
/dev/disk0s2                                                            71041024  25500488  45028536    37%    /
rpool/export/home/timeless                                             292480799  18353406 274127393     7%    /Users/timeless

timeless-mbp:~ timeless$ df /Users/timeless/Documents
Filesystem                 512-blocks     Used Available Capacity  Mounted on
rpool/export/home/timeless  292480796 18353406 274127390     7%    /Users/timeless

timeless-mbp:~ timeless$ mount |grep 'rpool/export/home/timeless '
rpool/export/home/timeless on /Users/timeless (zfs, local)

I'm using zfs 119

The code is looping here:

4828 /* static */
4829 QString VBoxGlobal::documentsPath()
4830 {
4831     QString path;
4835     path = QDesktopServices::storageLocation (QDesktopServices::DocumentsLocation);
4839     QDir dir (path);
4840     while (!dir.exists())
4841         dir.cdUp();

 http://doc.trolltech.com/4.5/qdir.html#cdUp

bool QDir::cdUp ()

Changes directory by moving one directory up from the QDir's current directory.

Returns true if the new directory exists and is readable; otherwise returns false. Note that the logical cdUp() operation is not performed if the new directory does not exist.

I haven't checked, but cdUp clearly can return an error and the code clearly isn't checking for the error, so I believe the code should be fixed.

Change History

comment:1 Changed 5 years ago by timeless

oh, right, rpool is the name of the pool, and various commands (especially applescript?) get confused and treat it as a directory name, which is why the code ends up with stuff like this:

(gdb) b stat
Breakpoint 1 at 0x95a01308
Breakpoint 2 at 0x95a26de4
(gdb) c
Continuing.

Breakpoint 1, 0x95a01308 in stat ()
(gdb) info registers 
eax            0x18393470	406402160
...
(gdb) p (char*) 0x18393470
$3 = 0x18393470 "/Volumes/rpool/Documents"

It should read /Users/timeless/Documents, but instead has decided /Users/timeless is really a disk "rpool" and is looking for it in /Volumes/rpool

timeless-mbp:~ timeless$ ls -l /Volumes/
total 16
lrwxr-xr-x   1 root      admin     1 Jun  2 01:35 Mac OS X -> /
drwxr-xr-x  14 timeless  staff  4096 Nov 19  2008 OpenSolaris

At some point, I'll try to file a bug against Qt....

comment:2 Changed 5 years ago by frank

  • Summary changed from Hang under VBoxGlobal::documentsPath because QDir::cdUp isn't checked for failure to Hang under VBoxGlobal::documentsPath because QDir::cdUp isn't checked for failure => Fixed in SVN

comment:3 Changed 5 years ago by sandervl73

  • Status changed from new to closed
  • Resolution set to fixed
Note: See TracTickets for help on using tickets.

www.oracle.com
ContactPrivacy policyTerms of Use