uint16 tid = fsp->conn->cnum;
int fnum = fsp->fnum;
unsigned int i, j, dcount=0;
+ int num_deleted_windows_locks = 0;
struct lock_struct *locks = (struct lock_struct *)br_lck->lock_data;
struct process_id pid = procid_self();
BOOL unlock_individually = False;
if (lock->context.tid == tid && procid_equal(&lock->context.pid, &pid)) {
if ((lock->lock_flav == WINDOWS_LOCK) && (lock->fnum == fnum)) {
del_this_lock = True;
+ num_deleted_windows_locks++;
} else if (lock->lock_flav == POSIX_LOCK) {
del_this_lock = True;
}
}
}
- /* Reduce the lock reference count on this dev/ino pair. */
- reduce_windows_lock_ref_count(fsp, dcount);
+ if (num_deleted_windows_locks) {
+ /* Reduce the Windows lock reference count on this dev/ino pair. */
+ reduce_windows_lock_ref_count(fsp, num_deleted_windows_locks);
+ }
}
/****************************************************************************
*/
if(!posix_lock_in_range(&offset, &count, u_offset, u_count)) {
+ increment_windows_lock_ref_count(fsp);
return True;
}
if ((l_ctx = talloc_init("set_posix_lock")) == NULL) {
DEBUG(0,("set_posix_lock_windows_flavour: unable to init talloc context.\n"));
- return True; /* Not a fatal error. */
+ return False;
}
if ((ll = TALLOC_P(l_ctx, struct lock_list)) == NULL) {
DEBUG(0,("set_posix_lock_windows_flavour: unable to talloc unlock list.\n"));
talloc_destroy(l_ctx);
- return True; /* Not a fatal error. */
+ return False;
}
/*
DEBUG(5,("release_posix_lock_windows_flavour: File %s, offset = %.0f, count = %.0f\n",
fsp->fsp_name, (double)u_offset, (double)u_count ));
+ /* Remember the number of Windows locks we have on this dev/ino pair. */
+ decrement_windows_lock_ref_count(fsp);
+
/*
* If the requested lock won't fit in the POSIX range, we will
* pretend it was successful.
return True;
}
- /* Remember the number of Windows locks we have on this dev/ino pair. */
- decrement_windows_lock_ref_count(fsp);
-
if ((ul_ctx = talloc_init("release_posix_lock")) == NULL) {
DEBUG(0,("release_posix_lock_windows_flavour: unable to init talloc context.\n"));
- return True; /* Not a fatal error. */
+ return False;
}
if ((ul = TALLOC_P(ul_ctx, struct lock_list)) == NULL) {
DEBUG(0,("release_posix_lock_windows_flavour: unable to talloc unlock list.\n"));
talloc_destroy(ul_ctx);
- return True; /* Not a fatal error. */
+ return False;
}
/*