From b8c9569f04a640712da5d2d945c29c03eb53ff09 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 2 Mar 2023 09:08:14 +0100 Subject: [PATCH] fix transaction accounting in pgf_boot_ngf & pgf_checkout_revision --- src/runtime/c/pgf/pgf.cxx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/runtime/c/pgf/pgf.cxx b/src/runtime/c/pgf/pgf.cxx index 9a74adf95..f9136b03b 100644 --- a/src/runtime/c/pgf/pgf.cxx +++ b/src/runtime/c/pgf/pgf.cxx @@ -153,12 +153,15 @@ PgfDB *pgf_read_ngf(const char *fpath, db = new PgfDB(fpath, O_RDWR, 0, 0); { - DB_scope scope(db, WRITER_SCOPE); + DB_scope scope(db, READER_SCOPE); ref pgf = db->get_active_revision(); - *revision = db->register_revision(pgf.tagged(), PgfDB::get_txn_id()); + *revision = 0; + if (pgf != 0) { + *revision = db->register_revision(pgf.tagged(), PgfDB::get_txn_id()-1); + db->ref_count++; + } } - db->ref_count++; return db; } PGF_API_END @@ -1245,11 +1248,11 @@ PGF_API PgfRevision pgf_checkout_revision(PgfDB *db, PgfExn *err) { PGF_API_BEGIN { - DB_scope scope(db, WRITER_SCOPE); + DB_scope scope(db, READER_SCOPE); ref pgf = db->get_active_revision(); object rev = 0; if (pgf != 0) { - rev = db->register_revision(pgf.tagged(), PgfDB::get_txn_id()); + rev = db->register_revision(pgf.tagged(), PgfDB::get_txn_id()-1); db->ref_count++; } return rev;