dbwrap: Convert dbwrap_store to dbwrap_do_locked
authorVolker Lendecke <vl@samba.org>
Wed, 9 Nov 2016 15:34:28 +0000 (16:34 +0100)
committerJeremy Allison <jra@samba.org>
Tue, 15 Aug 2017 22:27:10 +0000 (00:27 +0200)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/dbwrap/dbwrap.c

index 22437f620834984a9d61aeaa434c7979a1762e38..0e576b30f60bc28fcb2bad3e3125da141e457158 100644 (file)
@@ -301,22 +301,30 @@ bool dbwrap_exists(struct db_context *db, TDB_DATA key)
        return (result == 1);
 }
 
+struct dbwrap_store_state {
+       TDB_DATA data;
+       int flags;
+       NTSTATUS status;
+};
+
+static void dbwrap_store_fn(struct db_record *rec, void *private_data)
+{
+       struct dbwrap_store_state *state = private_data;
+       state->status = dbwrap_record_store(rec, state->data, state->flags);
+}
+
 NTSTATUS dbwrap_store(struct db_context *db, TDB_DATA key,
                      TDB_DATA data, int flags)
 {
-       struct db_record *rec;
+       struct dbwrap_store_state state = { .data = data, .flags = flags };
        NTSTATUS status;
-       TALLOC_CTX *frame = talloc_stackframe();
 
-       rec = dbwrap_fetch_locked(db, frame, key);
-       if (rec == NULL) {
-               TALLOC_FREE(frame);
-               return NT_STATUS_NO_MEMORY;
+       status = dbwrap_do_locked(db, key, dbwrap_store_fn, &state);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
        }
 
-       status = dbwrap_record_store(rec, data, flags);
-       TALLOC_FREE(frame);
-       return status;
+       return state.status;
 }
 
 NTSTATUS dbwrap_delete(struct db_context *db, TDB_DATA key)