From fde87a10942ccc17f45ee7264a6907d16e6914e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 18 Apr 2006 13:55:47 +0000 Subject: [PATCH] Instead of waiting forever, get_vnode() will now fail after 3 seconds if the vnode is not becoming unbusy (right now it even panics, but that can be removed later on). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17161 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/fs/vfs.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp index 7b78511155..0d994392ee 100644 --- a/src/system/kernel/fs/vfs.cpp +++ b/src/system/kernel/fs/vfs.cpp @@ -799,12 +799,17 @@ get_vnode(mount_id mountID, vnode_id vnodeID, struct vnode **_vnode, int reenter mutex_lock(&sVnodeMutex); + int32 tries = 300; + // try for 3 secs restart: struct vnode *vnode = lookup_vnode(mountID, vnodeID); if (vnode && vnode->busy) { - // ToDo: this is an endless loop if the vnode is not - // becoming unbusy anymore (for whatever reason) mutex_unlock(&sVnodeMutex); + if (--tries < 0) { + // vnode doesn't seem to become unbusy + panic("vnode %ld.%Ld is not becoming unbusy!\n", mountID, vnodeID); + return B_BUSY; + } snooze(10000); // 10 ms mutex_lock(&sVnodeMutex); goto restart;