mirror of
https://git.openafs.org/openafs.git
synced 2025-01-31 05:27:44 +00:00
afs: Avoid memory leak on recursive write flock
When a process requests an exclusive lock on a file on which it already holds an exclusive lock, we basically form a no-op. However, HandleFlock was allocating a new SimpleLocks and attaching it to avc->slocks, without freeing the old SimpleLocks structure. Since we don't need to do anything if we already hold an exclusive lock, just break out of the loop right away when we detect that scenario. Thus we avoid adding a new structure to avc->slocks, and we avoid a memory leak. Reviewed-on: http://gerrit.openafs.org/4395 Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Derrick Brashear <shadow@dementia.org> (cherry picked from commit ba9ae1ed7c269d7c080b5ce99b3b4bb2fe0a2a6f) Change-Id: I40af9d9aad3fa8651c0f16608bdb1bea2ec0f437 Reviewed-on: http://gerrit.openafs.org/4436 Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Derrick Brashear <shadow@dementia.org>
This commit is contained in:
parent
7a7e9719f0
commit
bc905dd9b3
@ -379,8 +379,14 @@ HandleFlock(register struct vcache *avc, int acom, struct vrequest *areq,
|
||||
} else if (avc->flockCount == -1 && (acom & LOCK_EX)) {
|
||||
if (lockIdcmp2(&flock, avc, NULL, 1, clid)) {
|
||||
code = EWOULDBLOCK;
|
||||
} else
|
||||
} else {
|
||||
code = 0;
|
||||
/* We've just re-grabbed an exclusive lock, so we don't
|
||||
* need to contact the fileserver, and we don't need to
|
||||
* add the lock to avc->slocks (since we already have a
|
||||
* lock there). So, we are done. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (code == 0) {
|
||||
/* compatible here, decide if needs to go to file server. If
|
||||
|
Loading…
x
Reference in New Issue
Block a user