diff --git a/src/runtime/c/pgf/db.cxx b/src/runtime/c/pgf/db.cxx index 38f65b589..1ea27c8f3 100644 --- a/src/runtime/c/pgf/db.cxx +++ b/src/runtime/c/pgf/db.cxx @@ -1102,6 +1102,7 @@ fit: } } + descr = ptr(block_descr, map); int index = (descr->descr_txn_id != ms->curr_txn_id); descr->chain = free_descriptors[index]; free_descriptors[index] = map; diff --git a/src/runtime/c/pgf/pgf.cxx b/src/runtime/c/pgf/pgf.cxx index 000a136b0..57ed1506d 100644 --- a/src/runtime/c/pgf/pgf.cxx +++ b/src/runtime/c/pgf/pgf.cxx @@ -1183,7 +1183,7 @@ PgfRevision pgf_start_transaction(PgfDB *db, PgfExn *err) new_pgf->major_version = pgf->major_version; new_pgf->minor_version = pgf->minor_version; new_pgf->gflags = pgf->gflags; - new_pgf->abstract.name = textdup_db(&(*pgf->abstract.name)); + new_pgf->abstract.name = textdup_db(ref::from_ptr(&(*pgf->abstract.name))); new_pgf->abstract.aflags = pgf->abstract.aflags; new_pgf->abstract.funs = pgf->abstract.funs; new_pgf->abstract.cats = pgf->abstract.cats; diff --git a/src/runtime/c/pgf/text.cxx b/src/runtime/c/pgf/text.cxx index 017fc6237..d29126aa9 100644 --- a/src/runtime/c/pgf/text.cxx +++ b/src/runtime/c/pgf/text.cxx @@ -92,6 +92,14 @@ ref textdup_db(PgfText *t1) return t2; } +PGF_INTERNAL +ref textdup_db(ref t1) +{ + ref t2 = PgfDB::malloc(t1->size+1); + memcpy(&(*t2), &(*t1), sizeof(PgfText)+t1->size+1); + return t2; +} + PGF_INTERNAL void text_db_release(ref text) { diff --git a/src/runtime/c/pgf/text.h b/src/runtime/c/pgf/text.h index f2b34c828..ff0100484 100644 --- a/src/runtime/c/pgf/text.h +++ b/src/runtime/c/pgf/text.h @@ -23,6 +23,9 @@ PgfText* textdup(PgfText *t1); PGF_INTERNAL_DECL ref textdup_db(PgfText *t1); +PGF_INTERNAL_DECL +ref textdup_db(ref t1); + PGF_INTERNAL void text_db_release(ref text);