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.