summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2016-02-27 01:06:13 +0100
committerJeremy Allison <jra@samba.org>2016-02-28 05:03:22 +0100
commita9dcbd09801ab19c2abdb803c730120bd20d8175 (patch)
treedc3c1f69351217e92417974979c52518f831debf
parenta5e4f14c3b132c886cda2ab4cc14f1f764ff04eb (diff)
downloadsamba-a9dcbd09801ab19c2abdb803c730120bd20d8175.tar.gz
smbXsrv_tcon: factor fetch-locking of local record into function
Signed-off-by: Michael Adam <obnox@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
-rw-r--r--source3/smbd/smbXsrv_tcon.c58
1 files changed, 29 insertions, 29 deletions
diff --git a/source3/smbd/smbXsrv_tcon.c b/source3/smbd/smbXsrv_tcon.c
index 5f10c4997c0..ddd03f61090 100644
--- a/source3/smbd/smbXsrv_tcon.c
+++ b/source3/smbd/smbXsrv_tcon.c
@@ -171,6 +171,27 @@ static struct db_record *smbXsrv_tcon_global_fetch_locked(
return rec;
}
+static struct db_record *smbXsrv_tcon_local_fetch_locked(
+ struct db_context *db,
+ uint32_t id,
+ TALLOC_CTX *mem_ctx)
+{
+ TDB_DATA key;
+ uint8_t key_buf[SMBXSRV_TCON_LOCAL_TDB_KEY_SIZE];
+ struct db_record *rec = NULL;
+
+ key = smbXsrv_tcon_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_tcon_table_init(TALLOC_CTX *mem_ctx,
struct smbXsrv_tcon_table *table,
uint32_t lowest_id,
@@ -287,8 +308,6 @@ static NTSTATUS smb1srv_tcon_local_allocate_id(struct db_context *db,
for (i = 0; i < (range / 2); i++) {
uint32_t id;
- uint8_t key_buf[SMBXSRV_TCON_LOCAL_TDB_KEY_SIZE];
- TDB_DATA key;
TDB_DATA val;
struct db_record *rec = NULL;
@@ -302,9 +321,7 @@ static NTSTATUS smb1srv_tcon_local_allocate_id(struct db_context *db,
id = highest_id;
}
- key = smbXsrv_tcon_local_id_to_key(id, key_buf);
-
- rec = dbwrap_fetch_locked(db, mem_ctx, key);
+ rec = smbXsrv_tcon_local_fetch_locked(db, id, mem_ctx);
if (rec == NULL) {
return NT_STATUS_INSUFFICIENT_RESOURCES;
}
@@ -354,16 +371,12 @@ static NTSTATUS smb1srv_tcon_local_allocate_id(struct db_context *db,
if (NT_STATUS_IS_OK(state.status)) {
uint32_t id;
- uint8_t key_buf[SMBXSRV_TCON_LOCAL_TDB_KEY_SIZE];
- TDB_DATA key;
TDB_DATA val;
struct db_record *rec = NULL;
id = state.useable_id;
- key = smbXsrv_tcon_local_id_to_key(id, key_buf);
-
- rec = dbwrap_fetch_locked(db, mem_ctx, key);
+ rec = smbXsrv_tcon_local_fetch_locked(db, id, mem_ctx);
if (rec == NULL) {
return NT_STATUS_INSUFFICIENT_RESOURCES;
}
@@ -755,17 +768,14 @@ static NTSTATUS smbXsrv_tcon_create(struct smbXsrv_tcon_table *table,
if (protocol >= PROTOCOL_SMB2_02) {
uint64_t id = global->tcon_global_id;
- uint8_t key_buf[SMBXSRV_TCON_LOCAL_TDB_KEY_SIZE];
- TDB_DATA key;
global->tcon_wire_id = id;
tcon->local_id = global->tcon_global_id;
- key = smbXsrv_tcon_local_id_to_key(tcon->local_id, key_buf);
-
- local_rec = dbwrap_fetch_locked(table->local.db_ctx,
- tcon, key);
+ local_rec = smbXsrv_tcon_local_fetch_locked(table->local.db_ctx,
+ tcon->local_id,
+ tcon /* TALLOC_CTX */);
if (local_rec == NULL) {
TALLOC_FREE(tcon);
return NT_STATUS_NO_MEMORY;
@@ -926,20 +936,10 @@ NTSTATUS smbXsrv_tcon_disconnect(struct smbXsrv_tcon *tcon, uint64_t vuid)
local_rec = tcon->db_rec;
if (local_rec == NULL) {
- uint8_t key_buf[SMBXSRV_TCON_LOCAL_TDB_KEY_SIZE];
- TDB_DATA key;
-
- key = smbXsrv_tcon_local_id_to_key(tcon->local_id, key_buf);
-
- local_rec = dbwrap_fetch_locked(table->local.db_ctx,
- tcon, key);
+ local_rec = smbXsrv_tcon_local_fetch_locked(table->local.db_ctx,
+ tcon->local_id,
+ tcon /* TALLOC_CTX */);
if (local_rec == NULL) {
- DEBUG(0, ("smbXsrv_tcon_disconnect(0x%08x, '%s'): "
- "Failed to lock local key '%s'\n",
- tcon->global->tcon_global_id,
- tcon->global->share_name,
- hex_encode_talloc(local_rec, key.dptr,
- key.dsize)));
error = NT_STATUS_INTERNAL_ERROR;
}
}