mirror of
https://github.com/samba-team/samba.git
synced 2025-03-10 12:58:35 +03:00
smbXsrv_open: factor fetch-locking of local record into function
smbXsrv_open_local_fetch_locked() Signed-off-by: Michael Adam <obnox@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Fri Feb 26 22:35:28 CET 2016 on sn-devel-144 (cherry picked from commit bba426dbbbe0e4aebd99b78cff037eac754aa282) BUG: https://bugzilla.samba.org/show_bug.cgi?id=11779
This commit is contained in:
parent
c3fcfadf02
commit
6c78c8d496
@ -172,6 +172,27 @@ static struct db_record *smbXsrv_open_global_fetch_locked(
|
||||
return rec;
|
||||
}
|
||||
|
||||
static struct db_record *smbXsrv_open_local_fetch_locked(
|
||||
struct db_context *db,
|
||||
uint32_t id,
|
||||
TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
TDB_DATA key;
|
||||
uint8_t key_buf[SMBXSRV_OPEN_LOCAL_TDB_KEY_SIZE];
|
||||
struct db_record *rec = NULL;
|
||||
|
||||
key = smbXsrv_open_local_id_to_key(id, key_buf);
|
||||
|
||||
rec = dbwrap_fetch_locked(db, mem_ctx, key);
|
||||
|
||||
if (rec == NULL) {
|
||||
DBG_DEBUG("Failed to lock local id 0x%08x, key '%s'\n", id,
|
||||
hex_encode_talloc(talloc_tos(), key.dptr, key.dsize));
|
||||
}
|
||||
|
||||
return rec;
|
||||
}
|
||||
|
||||
static NTSTATUS smbXsrv_open_table_init(struct smbXsrv_connection *conn,
|
||||
uint32_t lowest_id,
|
||||
uint32_t highest_id,
|
||||
@ -296,8 +317,6 @@ static NTSTATUS smbXsrv_open_local_allocate_id(struct db_context *db,
|
||||
|
||||
for (i = 0; i < (range / 2); i++) {
|
||||
uint32_t id;
|
||||
uint8_t key_buf[SMBXSRV_OPEN_LOCAL_TDB_KEY_SIZE];
|
||||
TDB_DATA key;
|
||||
TDB_DATA val;
|
||||
struct db_record *rec = NULL;
|
||||
|
||||
@ -311,9 +330,7 @@ static NTSTATUS smbXsrv_open_local_allocate_id(struct db_context *db,
|
||||
id = highest_id;
|
||||
}
|
||||
|
||||
key = smbXsrv_open_local_id_to_key(id, key_buf);
|
||||
|
||||
rec = dbwrap_fetch_locked(db, mem_ctx, key);
|
||||
rec = smbXsrv_open_local_fetch_locked(db, id, mem_ctx);
|
||||
if (rec == NULL) {
|
||||
return NT_STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
@ -363,16 +380,12 @@ static NTSTATUS smbXsrv_open_local_allocate_id(struct db_context *db,
|
||||
|
||||
if (NT_STATUS_IS_OK(state.status)) {
|
||||
uint32_t id;
|
||||
uint8_t key_buf[SMBXSRV_OPEN_LOCAL_TDB_KEY_SIZE];
|
||||
TDB_DATA key;
|
||||
TDB_DATA val;
|
||||
struct db_record *rec = NULL;
|
||||
|
||||
id = state.useable_id;
|
||||
|
||||
key = smbXsrv_open_local_id_to_key(id, key_buf);
|
||||
|
||||
rec = dbwrap_fetch_locked(db, mem_ctx, key);
|
||||
rec = smbXsrv_open_local_fetch_locked(db, id, mem_ctx);
|
||||
if (rec == NULL) {
|
||||
return NT_STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
@ -1044,19 +1057,10 @@ NTSTATUS smbXsrv_open_close(struct smbXsrv_open *op, NTTIME now)
|
||||
|
||||
local_rec = op->db_rec;
|
||||
if (local_rec == NULL) {
|
||||
uint8_t key_buf[SMBXSRV_OPEN_LOCAL_TDB_KEY_SIZE];
|
||||
TDB_DATA key;
|
||||
|
||||
key = smbXsrv_open_local_id_to_key(op->local_id, key_buf);
|
||||
|
||||
local_rec = dbwrap_fetch_locked(table->local.db_ctx,
|
||||
op, key);
|
||||
local_rec = smbXsrv_open_local_fetch_locked(table->local.db_ctx,
|
||||
op->local_id,
|
||||
op /* TALLOC_CTX*/);
|
||||
if (local_rec == NULL) {
|
||||
DEBUG(0, ("smbXsrv_open_close(0x%08x): "
|
||||
"Failed to lock local key '%s'\n",
|
||||
op->global->open_global_id,
|
||||
hex_encode_talloc(local_rec, key.dptr,
|
||||
key.dsize)));
|
||||
error = NT_STATUS_INTERNAL_ERROR;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user