From 658b7ec4eef5227f7b0e7470faae043509dac24d Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 17 Jul 2014 14:07:45 +0000 Subject: [PATCH] messaging4: Use tdb_append in irpc_add_name This makes the custom locking code unnecessary here Signed-off-by: Volker Lendecke Reviewed-by: Stefan Metzmacher --- source4/lib/messaging/messaging.c | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c index 66732ceb463..e7b1e9d6cdd 100644 --- a/source4/lib/messaging/messaging.c +++ b/source4/lib/messaging/messaging.c @@ -924,28 +924,20 @@ static struct tdb_wrap *irpc_namedb_open(TALLOC_CTX *mem_ctx, const char *base_p */ NTSTATUS irpc_add_name(struct imessaging_context *msg_ctx, const char *name) { - struct tdb_wrap *t = msg_ctx->names_db; - TDB_DATA rec; - int count; + struct tdb_context *t = msg_ctx->names_db->tdb; + struct server_id pid = msg_ctx->server_id; + TDB_DATA key, data; + int ret; NTSTATUS status = NT_STATUS_OK; - if (tdb_lock_bystring(t->tdb, name) != 0) { - return NT_STATUS_LOCK_NOT_GRANTED; - } - rec = tdb_fetch_bystring(t->tdb, name); - count = rec.dsize / sizeof(struct server_id); - rec.dptr = (unsigned char *)realloc_p(rec.dptr, struct server_id, count+1); - rec.dsize += sizeof(struct server_id); - if (rec.dptr == NULL) { - tdb_unlock_bystring(t->tdb, name); - return NT_STATUS_NO_MEMORY; - } - ((struct server_id *)rec.dptr)[count] = msg_ctx->server_id; - if (tdb_store_bystring(t->tdb, name, rec, 0) != 0) { - status = NT_STATUS_INTERNAL_ERROR; + key = string_term_tdb_data(name); + data = (TDB_DATA) { .dptr = (uint8_t *)&pid, .dsize = sizeof(pid) }; + + ret = tdb_append(t, key, data); + if (ret != 0) { + enum TDB_ERROR err = tdb_error(t); + return map_nt_error_from_tdb(err); } - free(rec.dptr); - tdb_unlock_bystring(t->tdb, name); msg_ctx->names = str_list_add(msg_ctx->names, name); talloc_steal(msg_ctx, msg_ctx->names); -- 2.11.4.GIT