messaging4: Use tdb_append in irpc_add_name
authorVolker Lendecke <vl@samba.org>
Thu, 17 Jul 2014 14:07:45 +0000 (14:07 +0000)
committerVolker Lendecke <vl@samba.org>
Mon, 21 Jul 2014 16:00:10 +0000 (18:00 +0200)
This makes the custom locking code unnecessary here

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source4/lib/messaging/messaging.c

index 66732ceb463c4da8ccae6721a5af8245a8db7c55..e7b1e9d6cdd99542f09fc9495daa082d706b8b2e 100644 (file)
@@ -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);