return NT_STATUS_NO_MEMORY;
}
+ /*
+ * Invalidate rec->value, nobody shall assume it's set from
+ * within dbwrap_do_locked().
+ */
+ rec->value_valid = false;
+
fn(rec, rec->value, private_data);
TALLOC_FREE(rec);
rec = (struct db_record) {
.db = db, .key = key,
- .value = (struct TDB_DATA) { .dptr = buf,
- .dsize = talloc_get_size(buf) },
- .value_valid = true,
+ .value_valid = false,
.storev = db_tdb_storev, .delete_rec = db_tdb_delete,
.private_data = ctx
};
- fn(&rec, rec.value, private_data);
+ fn(&rec,
+ (TDB_DATA) { .dptr = buf, .dsize = talloc_get_size(buf) },
+ private_data);
tdb_chainunlock(ctx->wtdb->tdb, key);
state->subrec.wrec.num_watchers * SERVER_ID_BUF_LENGTH);
SMB_ASSERT(watchers != NULL);
state->subrec.wrec.watchers = watchers;
-
- rec.value = state->subrec.wrec.data;
- rec.value_valid = true;
}
state->fn(&rec, state->subrec.wrec.data, state->private_data);