From 31d8c43d1c04be453ff6b7afa3f2cdb95cde4bc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sat, 28 Aug 2010 15:17:23 +0000 Subject: [PATCH] * Fixed CID 1262: waitForLock was not only -1 when exiting the loop, it didn't make much sense to wake up any waiters either in this case. * Fixed doubled semaphore deletion. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38418 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/fs/vfs.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp index 2e6f0dc46d..97ba7c9dbb 100644 --- a/src/system/kernel/fs/vfs.cpp +++ b/src/system/kernel/fs/vfs.cpp @@ -1563,8 +1563,6 @@ release_advisory_lock(struct vnode* vnode, struct flock* flock) // we've detached the locking from the vnode, so we can // safely delete it - delete_sem(locking->lock); - delete_sem(locking->wait_sem); delete locking; } else { // the locking is in use again @@ -1601,7 +1599,6 @@ acquire_advisory_lock(struct vnode* vnode, pid_t session, struct flock* flock, // TODO: do deadlock detection! struct advisory_locking* locking; - sem_id waitForLock; while (true) { // if this vnode has an advisory_locking structure attached, @@ -1612,7 +1609,7 @@ acquire_advisory_lock(struct vnode* vnode, pid_t session, struct flock* flock, locking = vnode->advisory_locking; team_id team = team_get_current_team_id(); - waitForLock = -1; + sem_id waitForLock = -1; // test for collisions LockList::Iterator iterator = locking->locks.GetIterator(); @@ -1654,9 +1651,7 @@ acquire_advisory_lock(struct vnode* vnode, pid_t session, struct flock* flock, struct advisory_lock* lock = (struct advisory_lock*)malloc( sizeof(struct advisory_lock)); if (lock == NULL) { - if (waitForLock >= B_OK) - release_sem_etc(waitForLock, 1, B_RELEASE_ALL); - release_sem(locking->lock); + put_advisory_locking(locking); return B_NO_MEMORY; }