mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
Fix more of the SMB2-LOCK tests. Correctly unlock locks on error.
Jeremy.
This commit is contained in:
parent
4f25baecc1
commit
a9a3c83b41
@ -38,7 +38,8 @@ struct smbd_smb2_lock_state {
|
|||||||
struct smbd_lock_element *locks;
|
struct smbd_lock_element *locks;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void remove_pending_lock(TALLOC_CTX *mem_ctx, struct blocking_lock_record *blr);
|
static void remove_pending_lock(struct smbd_smb2_lock_state *state,
|
||||||
|
struct blocking_lock_record *blr);
|
||||||
|
|
||||||
static struct tevent_req *smbd_smb2_lock_send(TALLOC_CTX *mem_ctx,
|
static struct tevent_req *smbd_smb2_lock_send(TALLOC_CTX *mem_ctx,
|
||||||
struct tevent_context *ev,
|
struct tevent_context *ev,
|
||||||
@ -681,10 +682,12 @@ bool push_blocking_lock_request_smb2( struct byte_range_lock *br_lck,
|
|||||||
Remove a pending lock record under lock.
|
Remove a pending lock record under lock.
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
static void remove_pending_lock(TALLOC_CTX *mem_ctx, struct blocking_lock_record *blr)
|
static void remove_pending_lock(struct smbd_smb2_lock_state *state,
|
||||||
|
struct blocking_lock_record *blr)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
struct byte_range_lock *br_lck = brl_get_locks(
|
struct byte_range_lock *br_lck = brl_get_locks(
|
||||||
mem_ctx, blr->fsp);
|
state, blr->fsp);
|
||||||
|
|
||||||
DEBUG(10, ("remove_pending_lock: BLR = %p\n", blr));
|
DEBUG(10, ("remove_pending_lock: BLR = %p\n", blr));
|
||||||
|
|
||||||
@ -698,6 +701,19 @@ static void remove_pending_lock(TALLOC_CTX *mem_ctx, struct blocking_lock_record
|
|||||||
blr);
|
blr);
|
||||||
TALLOC_FREE(br_lck);
|
TALLOC_FREE(br_lck);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Remove the locks we already got. */
|
||||||
|
|
||||||
|
for(i = blr->lock_num - 1; i >= 0; i--) {
|
||||||
|
struct smbd_lock_element *e = &state->locks[i];
|
||||||
|
|
||||||
|
do_unlock(smbd_messaging_context(),
|
||||||
|
blr->fsp,
|
||||||
|
e->smblctx,
|
||||||
|
e->count,
|
||||||
|
e->offset,
|
||||||
|
WINDOWS_LOCK);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
|
Loading…
Reference in New Issue
Block a user