1
0
forked from GitHub/gf-core

fix reference counting for concrete revisions

This commit is contained in:
krangelov
2021-11-09 08:02:20 +01:00
parent 73b52bf4b5
commit 1aacc34deb
3 changed files with 6 additions and 3 deletions

View File

@@ -873,7 +873,7 @@ PgfConcrRevision pgf_create_concrete(PgfDB *db, PgfRevision revision,
throw pgf_error("The concrete syntax already exists");
concr = PgfDB::malloc<PgfConcr>(name->size+1);
concr->ref_count = 1;
concr->ref_count = 2;
concr->ref_count_ex = 1;
concr->cflags = 0;
concr->lins = 0;
@@ -912,7 +912,7 @@ PgfConcrRevision pgf_clone_concrete(PgfDB *db, PgfRevision revision,
throw pgf_error("Unknown concrete syntax");
ref<PgfConcr> clone = PgfDB::malloc<PgfConcr>(name->size+1);
clone->ref_count = 1;
clone->ref_count = 2;
clone->ref_count_ex = 1;
clone->cflags = concr->cflags;
clone->lins = concr->lins;

View File

@@ -66,6 +66,8 @@ foreign import ccall "pgf_free_revision" pgf_free_revision_ :: Ptr PgfDB -> Ptr
foreign import ccall "&pgf_free_revision" pgf_free_revision :: FinalizerEnvPtr PgfDB (PgfRevision PGF)
foreign import ccall "pgf_free_concr_revision" pgf_free_concr_revision_ :: Ptr PgfDB -> Ptr (PgfRevision Concr) -> IO ()
foreign import ccall "&pgf_free_concr_revision" pgf_free_concr_revision :: FinalizerEnvPtr PgfDB (PgfRevision Concr)
foreign import ccall "pgf_abstract_name"

View File

@@ -147,7 +147,8 @@ dropCategory name = Transaction $ \c_db c_revision c_exn ->
createConcrete :: ConcName -> Transaction Concr () -> Transaction PGF ()
createConcrete name (Transaction f) = Transaction $ \c_db c_revision c_exn ->
withText name $ \c_name -> do
c_concr_revision <- pgf_create_concrete c_db c_revision c_name c_exn
bracket (pgf_create_concrete c_db c_revision c_name c_exn)
(pgf_free_concr_revision_ c_db) $ \c_concr_revision ->
f c_db c_concr_revision c_exn
alterConcrete :: ConcName -> Transaction Concr () -> Transaction PGF ()