summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/locking/locking.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/source3/locking/locking.c b/source3/locking/locking.c
index 7a2e8cf1d7..6efe4a73d7 100644
--- a/source3/locking/locking.c
+++ b/source3/locking/locking.c
@@ -153,20 +153,27 @@ NTSTATUS do_lock_spin(files_struct *fsp,connection_struct *conn, uint16 lock_pid
{
int j, maxj = lp_lock_spin_count();
int sleeptime = lp_lock_sleep_time();
- NTSTATUS status;
+ NTSTATUS status, ret;
if (maxj <= 0)
maxj = 1;
+ ret = NT_STATUS_OK; /* to keep dumb compilers happy */
+
for (j = 0; j < maxj; j++) {
status = do_lock(fsp, conn, lock_pid, count, offset, lock_type);
if (!NT_STATUS_EQUAL(status, NT_STATUS_LOCK_NOT_GRANTED) &&
- !NT_STATUS_EQUAL(status, NT_STATUS_FILE_LOCK_CONFLICT))
- break;
+ !NT_STATUS_EQUAL(status, NT_STATUS_FILE_LOCK_CONFLICT)) {
+ return status;
+ }
+ /* if we do fail then return the first error code we got */
+ if (j == 0) {
+ ret = status;
+ }
if (sleeptime)
sys_usleep(sleeptime);
}
- return status;
+ return ret;
}
/****************************************************************************