struct timeval now,
void *private_data)
{
- SMB_ASSERT(brl_timeout == te);
- TALLOC_FREE(brl_timeout);
+ struct smbd_server_connection *sconn = smbd_server_conn;
+ SMB_ASSERT(sconn->smb1.locks.brl_timeout == te);
+ TALLOC_FREE(sconn->smb1.locks.brl_timeout);
change_to_root_user(); /* TODO: Possibly run all timed events as
* root */
static bool recalc_brl_timeout(void)
{
+ struct smbd_server_connection *sconn = smbd_server_conn;
struct blocking_lock_record *blr;
struct timeval next_timeout;
int max_brl_timeout = lp_parm_int(-1, "brl", "recalctime", 5);
- TALLOC_FREE(brl_timeout);
+ TALLOC_FREE(sconn->smb1.locks.brl_timeout);
next_timeout = timeval_zero();
- for (blr = blocking_lock_queue; blr; blr = blr->next) {
+ for (blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = blr->next) {
if (timeval_is_zero(&blr->expire_time)) {
/*
* If we're blocked on pid 0xFFFFFFFF this is
(int)from_now.tv_sec, (int)from_now.tv_usec));
}
- if (!(brl_timeout = event_add_timed(smbd_event_context(), NULL,
+ if (!(sconn->smb1.locks.brl_timeout = event_add_timed(smbd_event_context(), NULL,
next_timeout,
brl_timeout_fn, NULL))) {
return False;
uint64_t count,
uint32_t blocking_pid)
{
+ struct smbd_server_connection *sconn = smbd_server_conn;
struct blocking_lock_record *blr;
NTSTATUS status;
SMB_PERFCOUNT_DEFER_OP(&req->pcd, &req->pcd);
blr->req = talloc_move(blr, &req);
- DLIST_ADD_END(blocking_lock_queue, blr, struct blocking_lock_record *);
+ DLIST_ADD_END(sconn->smb1.locks.blocking_lock_queue, blr, struct blocking_lock_record *);
recalc_brl_timeout();
/* Ensure we'll receive messages when this is unlocked. */
- if (!blocking_lock_unlock_state) {
+ if (!sconn->smb1.locks.blocking_lock_unlock_state) {
messaging_register(smbd_messaging_context(), NULL,
MSG_SMB_UNLOCK, received_unlock_msg);
- blocking_lock_unlock_state = true;
+ sconn->smb1.locks.blocking_lock_unlock_state = true;
}
DEBUG(3,("push_blocking_lock_request: lock request blocked with "
void cancel_pending_lock_requests_by_fid(files_struct *fsp, struct byte_range_lock *br_lck)
{
+ struct smbd_server_connection *sconn = smbd_server_conn;
struct blocking_lock_record *blr, *blr_cancelled, *next = NULL;
- for(blr = blocking_lock_queue; blr; blr = next) {
+ for(blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = next) {
unsigned char locktype = 0;
next = blr->next;
void remove_pending_lock_requests_by_mid(uint64_t mid)
{
+ struct smbd_server_connection *sconn = smbd_server_conn;
struct blocking_lock_record *blr, *next = NULL;
- for(blr = blocking_lock_queue; blr; blr = next) {
+ for(blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = next) {
files_struct *fsp;
struct byte_range_lock *br_lck;
}
blocking_lock_reply_error(blr,NT_STATUS_FILE_LOCK_CONFLICT);
- DLIST_REMOVE(blocking_lock_queue, blr);
+ DLIST_REMOVE(sconn->smb1.locks.blocking_lock_queue, blr);
TALLOC_FREE(blr);
}
}
bool blocking_lock_was_deferred(uint64_t mid)
{
+ struct smbd_server_connection *sconn = smbd_server_conn;
struct blocking_lock_record *blr, *next = NULL;
- for(blr = blocking_lock_queue; blr; blr = next) {
+ for(blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = next) {
next = blr->next;
if(blr->req->mid == mid) {
return True;
void process_blocking_lock_queue(void)
{
+ struct smbd_server_connection *sconn = smbd_server_conn;
struct timeval tv_curr = timeval_current();
struct blocking_lock_record *blr, *next = NULL;
* Go through the queue and see if we can get any of the locks.
*/
- for (blr = blocking_lock_queue; blr; blr = next) {
+ for (blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = next) {
next = blr->next;
TALLOC_FREE(br_lck);
}
- DLIST_REMOVE(blocking_lock_queue, blr);
+ DLIST_REMOVE(sconn->smb1.locks.blocking_lock_queue, blr);
TALLOC_FREE(blr);
continue;
}
}
blocking_lock_reply_error(blr,NT_STATUS_FILE_LOCK_CONFLICT);
- DLIST_REMOVE(blocking_lock_queue, blr);
+ DLIST_REMOVE(sconn->smb1.locks.blocking_lock_queue, blr);
TALLOC_FREE(blr);
}
}
struct server_id server_id,
DATA_BLOB *data)
{
+ struct smbd_server_connection *sconn = smbd_server_conn;
NTSTATUS err;
const char *msg = (const char *)data->data;
struct blocking_lock_record *blr;
nt_errstr(err) ));
blocking_lock_reply_error(blr, err);
- DLIST_REMOVE(blocking_lock_cancelled_queue, blr);
+ DLIST_REMOVE(sconn->smb1.locks.blocking_lock_cancelled_queue, blr);
TALLOC_FREE(blr);
}
unsigned char locktype,
NTSTATUS err)
{
+ struct smbd_server_connection *sconn = smbd_server_conn;
char msg[MSG_BLOCKING_LOCK_CANCEL_SIZE];
struct blocking_lock_record *blr;
- if (!blocking_lock_cancel_state) {
+ if (!sconn->smb1.locks.blocking_lock_cancel_state) {
/* Register our message. */
messaging_register(smbd_messaging_context(), NULL,
MSG_SMB_BLOCKING_LOCK_CANCEL,
process_blocking_lock_cancel_message);
- blocking_lock_cancel_state = True;
+ sconn->smb1.locks.blocking_lock_cancel_state = True;
}
- for (blr = blocking_lock_queue; blr; blr = blr->next) {
+ for (blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = blr->next) {
if (fsp == blr->fsp &&
lock_pid == blr->lock_pid &&
offset == blr->offset &&
}
/* Move to cancelled queue. */
- DLIST_REMOVE(blocking_lock_queue, blr);
- DLIST_ADD(blocking_lock_cancelled_queue, blr);
+ DLIST_REMOVE(sconn->smb1.locks.blocking_lock_queue, blr);
+ DLIST_ADD(sconn->smb1.locks.blocking_lock_cancelled_queue, blr);
/* Create the message. */
memcpy(msg, &blr, sizeof(blr));