mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
r16987: Fix the logic errors in ref-counting Windows locks.
Hopefully will fix the build farm. Still a few errors in RAW-LOCK to look at though... Jeremy.
This commit is contained in:
parent
53094435d8
commit
edd72d37de
@ -1225,6 +1225,7 @@ void brl_close_fnum(struct byte_range_lock *br_lck)
|
||||
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;
|
||||
@ -1289,6 +1290,7 @@ void brl_close_fnum(struct byte_range_lock *br_lck)
|
||||
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;
|
||||
}
|
||||
@ -1334,8 +1336,10 @@ void brl_close_fnum(struct byte_range_lock *br_lck)
|
||||
}
|
||||
}
|
||||
|
||||
/* 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);
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -981,6 +981,7 @@ BOOL set_posix_lock_windows_flavour(files_struct *fsp,
|
||||
*/
|
||||
|
||||
if(!posix_lock_in_range(&offset, &count, u_offset, u_count)) {
|
||||
increment_windows_lock_ref_count(fsp);
|
||||
return True;
|
||||
}
|
||||
|
||||
@ -1004,13 +1005,13 @@ BOOL set_posix_lock_windows_flavour(files_struct *fsp,
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1108,6 +1109,9 @@ BOOL release_posix_lock_windows_flavour(files_struct *fsp,
|
||||
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.
|
||||
@ -1117,18 +1121,15 @@ BOOL release_posix_lock_windows_flavour(files_struct *fsp,
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user