#4157 closed defect (fixed)
Hang under VBoxGlobal::documentsPath because QDir::cdUp isn't checked for failure => Fixed in SVN
Reported by: | timeless | Owned by: | |
---|---|---|---|
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:
- run virtualbox
- 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 (3)
comment:1 by , 16 years ago
comment:2 by , 16 years ago
Summary: | Hang under VBoxGlobal::documentsPath because QDir::cdUp isn't checked for failure → Hang under VBoxGlobal::documentsPath because QDir::cdUp isn't checked for failure => Fixed in SVN |
---|
comment:3 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
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:
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
At some point, I'll try to file a bug against Qt....