summaryrefslogtreecommitdiff
path: root/source3/smbd/smbXsrv_tcon.c
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2016-02-27 00:52:59 +0100
committerJeremy Allison <jra@samba.org>2016-02-28 05:03:22 +0100
commita5e4f14c3b132c886cda2ab4cc14f1f764ff04eb (patch)
treefc41264135675b118faaaa3be5de6e993577303a /source3/smbd/smbXsrv_tcon.c
parent9dfd531c19d3ffd17c4b8ecf6ad9eb1ab246ae5d (diff)
downloadsamba-a5e4f14c3b132c886cda2ab4cc14f1f764ff04eb.tar.gz
smbXsrv_tcon: factor fetch-locking of global record into function
Signed-off-by: Michael Adam <obnox@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/smbd/smbXsrv_tcon.c')
-rw-r--r--source3/smbd/smbXsrv_tcon.c61
1 files changed, 30 insertions, 31 deletions
diff --git a/source3/smbd/smbXsrv_tcon.c b/source3/smbd/smbXsrv_tcon.c
index 1d2a141e6b5..5f10c4997c0 100644
--- a/source3/smbd/smbXsrv_tcon.c
+++ b/source3/smbd/smbXsrv_tcon.c
@@ -150,6 +150,27 @@ static NTSTATUS smbXsrv_tcon_local_key_to_id(TDB_DATA key, uint32_t *id)
return NT_STATUS_OK;
}
+static struct db_record *smbXsrv_tcon_global_fetch_locked(
+ struct db_context *db,
+ uint32_t id,
+ TALLOC_CTX *mem_ctx)
+{
+ TDB_DATA key;
+ uint8_t key_buf[SMBXSRV_TCON_GLOBAL_TDB_KEY_SIZE];
+ struct db_record *rec = NULL;
+
+ key = smbXsrv_tcon_global_id_to_key(id, key_buf);
+
+ rec = dbwrap_fetch_locked(db, mem_ctx, key);
+
+ if (rec == NULL) {
+ DBG_DEBUG("Failed to lock global 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,
@@ -473,8 +494,6 @@ static NTSTATUS smbXsrv_tcon_global_allocate(struct db_context *db,
bool is_free = false;
bool was_free = false;
uint32_t id;
- uint8_t key_buf[SMBXSRV_TCON_GLOBAL_TDB_KEY_SIZE];
- TDB_DATA key;
if (i >= min_tries && last_free != 0) {
id = last_free;
@@ -488,9 +507,8 @@ static NTSTATUS smbXsrv_tcon_global_allocate(struct db_context *db,
id--;
}
- key = smbXsrv_tcon_global_id_to_key(id, key_buf);
-
- global->db_rec = dbwrap_fetch_locked(db, mem_ctx, key);
+ global->db_rec = smbXsrv_tcon_global_fetch_locked(db, id,
+ mem_ctx);
if (global->db_rec == NULL) {
talloc_free(global);
return NT_STATUS_INSUFFICIENT_RESOURCES;
@@ -820,8 +838,6 @@ NTSTATUS smbXsrv_tcon_update(struct smbXsrv_tcon *tcon)
{
struct smbXsrv_tcon_table *table = tcon->table;
NTSTATUS status;
- uint8_t key_buf[SMBXSRV_TCON_GLOBAL_TDB_KEY_SIZE];
- TDB_DATA key;
if (tcon->global->db_rec != NULL) {
DEBUG(0, ("smbXsrv_tcon_update(0x%08x): "
@@ -830,17 +846,11 @@ NTSTATUS smbXsrv_tcon_update(struct smbXsrv_tcon *tcon)
return NT_STATUS_INTERNAL_ERROR;
}
- key = smbXsrv_tcon_global_id_to_key(tcon->global->tcon_global_id,
- key_buf);
-
- tcon->global->db_rec = dbwrap_fetch_locked(table->global.db_ctx,
- tcon->global, key);
+ tcon->global->db_rec = smbXsrv_tcon_global_fetch_locked(
+ table->global.db_ctx,
+ tcon->global->tcon_global_id,
+ tcon->global /* TALLOC_CTX */);
if (tcon->global->db_rec == NULL) {
- DEBUG(0, ("smbXsrv_tcon_update(0x%08x): "
- "Failed to lock global key '%s'\n",
- tcon->global->tcon_global_id,
- hex_encode_talloc(talloc_tos(), key.dptr,
- key.dsize)));
return NT_STATUS_INTERNAL_DB_ERROR;
}
@@ -888,22 +898,11 @@ NTSTATUS smbXsrv_tcon_disconnect(struct smbXsrv_tcon *tcon, uint64_t vuid)
global_rec = tcon->global->db_rec;
tcon->global->db_rec = NULL;
if (global_rec == NULL) {
- uint8_t key_buf[SMBXSRV_TCON_GLOBAL_TDB_KEY_SIZE];
- TDB_DATA key;
-
- key = smbXsrv_tcon_global_id_to_key(
+ global_rec = smbXsrv_tcon_global_fetch_locked(
+ table->global.db_ctx,
tcon->global->tcon_global_id,
- key_buf);
-
- global_rec = dbwrap_fetch_locked(table->global.db_ctx,
- tcon->global, key);
+ tcon->global /* TALLOC_CTX */);
if (global_rec == NULL) {
- DEBUG(0, ("smbXsrv_tcon_disconnect(0x%08x, '%s'): "
- "Failed to lock global key '%s'\n",
- tcon->global->tcon_global_id,
- tcon->global->share_name,
- hex_encode_talloc(global_rec, key.dptr,
- key.dsize)));
error = NT_STATUS_INTERNAL_ERROR;
}
}