diff options
author | Michael Adam <obnox@samba.org> | 2016-02-27 00:52:59 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2016-02-28 05:03:22 +0100 |
commit | a5e4f14c3b132c886cda2ab4cc14f1f764ff04eb (patch) | |
tree | fc41264135675b118faaaa3be5de6e993577303a /source3/smbd/smbXsrv_tcon.c | |
parent | 9dfd531c19d3ffd17c4b8ecf6ad9eb1ab246ae5d (diff) | |
download | samba-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.c | 61 |
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; } } |