diff options
-rw-r--r-- | source3/smbd/blocking.c | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/source3/smbd/blocking.c b/source3/smbd/blocking.c index 02091d18ef..f3649159c9 100644 --- a/source3/smbd/blocking.c +++ b/source3/smbd/blocking.c @@ -575,37 +575,41 @@ void cancel_pending_lock_requests_by_fid(files_struct *fsp, struct byte_range_lo blocking_lock_record *blr, *next = NULL; for(blr = blocking_lock_queue; blr; blr = next) { + unsigned char locktype = 0; + next = blr->next; - if(blr->fsp->fnum == fsp->fnum) { - unsigned char locktype = 0; + if (blr->fsp->fnum != fsp->fnum) { + continue; + } - if (blr->com_type == SMBlockingX) { - locktype = CVAL(blr->inbuf,smb_vwv3); - } + if (blr->com_type == SMBlockingX) { + locktype = CVAL(blr->inbuf,smb_vwv3); + } - if (br_lck) { - DEBUG(10,("remove_pending_lock_requests_by_fid - removing request type %d for \ -file %s fnum = %d\n", blr->com_type, fsp->fsp_name, fsp->fnum )); + if (br_lck) { + DEBUG(10, ("remove_pending_lock_requests_by_fid - " + "removing request type %d for file %s fnum " + "= %d\n", blr->com_type, fsp->fsp_name, + fsp->fnum)); - brl_lock_cancel(br_lck, + brl_lock_cancel(br_lck, blr->lock_pid, procid_self(), blr->offset, blr->count, blr->lock_flav); - blocking_lock_cancel(fsp, - blr->lock_pid, - blr->offset, - blr->count, - blr->lock_flav, - locktype, - NT_STATUS_RANGE_NOT_LOCKED); - } - /* We're closing the file fsp here, so ensure - * we don't have a dangling pointer. */ - blr->fsp = NULL; + blocking_lock_cancel(fsp, + blr->lock_pid, + blr->offset, + blr->count, + blr->lock_flav, + locktype, + NT_STATUS_RANGE_NOT_LOCKED); } + /* We're closing the file fsp here, so ensure + * we don't have a dangling pointer. */ + blr->fsp = NULL; } } |