svn commit: samba r6579 - in branches/SAMBA_4_0/source/ntvfs/posix:
.
tridge at samba.org
tridge at samba.org
Mon May 2 15:58:54 GMT 2005
Author: tridge
Date: 2005-05-02 15:58:54 +0000 (Mon, 02 May 2005)
New Revision: 6579
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=6579
Log:
improved the handling of lock timeouts and cancels in the pvfs locking
code. On lock cancel don't retry the lock.
Modified:
branches/SAMBA_4_0/source/ntvfs/posix/pvfs_lock.c
Changeset:
Modified: branches/SAMBA_4_0/source/ntvfs/posix/pvfs_lock.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/posix/pvfs_lock.c 2005-05-02 15:58:03 UTC (rev 6578)
+++ branches/SAMBA_4_0/source/ntvfs/posix/pvfs_lock.c 2005-05-02 15:58:54 UTC (rev 6579)
@@ -104,7 +104,6 @@
int i;
BOOL timed_out;
- /* we consider a cancel to be a timeout */
timed_out = (reason != PVFS_WAIT_EVENT);
locks = lck->lockx.in.locks + lck->lockx.in.ulock_cnt;
@@ -117,16 +116,21 @@
DLIST_REMOVE(f->pending_list, pending);
- status = brl_lock(pvfs->brl_context,
- &f->handle->brl_locking_key,
- req->smbpid,
- f->fnum,
- locks[pending->pending_lock].offset,
- locks[pending->pending_lock].count,
- rw, NULL);
-
+ /* we don't retry on a cancel */
+ if (reason == PVFS_WAIT_CANCEL) {
+ status = NT_STATUS_CANCELLED;
+ } else {
+ status = brl_lock(pvfs->brl_context,
+ &f->handle->brl_locking_key,
+ req->smbpid,
+ f->fnum,
+ locks[pending->pending_lock].offset,
+ locks[pending->pending_lock].count,
+ rw, NULL);
+ }
if (NT_STATUS_IS_OK(status)) {
f->lock_count++;
+ timed_out = False;
}
/* if we have failed and timed out, or succeeded, then we
@@ -153,14 +157,10 @@
}
/* if we haven't timed out yet, then we can do more pending locks */
- if (timed_out) {
- pending = NULL;
+ if (rw == READ_LOCK) {
+ rw = PENDING_READ_LOCK;
} else {
- if (rw == READ_LOCK) {
- rw = PENDING_READ_LOCK;
- } else {
- rw = PENDING_WRITE_LOCK;
- }
+ rw = PENDING_WRITE_LOCK;
}
/* we've now got the pending lock. try and get the rest, which might
More information about the samba-cvs
mailing list