Skip to content

Commit

Permalink
fix #321 (makeshift)
Browse files Browse the repository at this point in the history
  • Loading branch information
nikosai committed Feb 12, 2024
1 parent 786d324 commit 0e59b7b
Showing 1 changed file with 37 additions and 1 deletion.
38 changes: 37 additions & 1 deletion src/vm/membrane.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -166,10 +166,46 @@ LmnRuleSetRef lmn_mem_get_ruleset(LmnMembraneRef m, int i) {
return (LmnRuleSetRef)m->get_rulesets()[i];
}


/* 膜memの解放を行う.
* 膜memに所属する子膜とアトムのメモリ管理は呼び出し側で行う. */
LmnMembrane::~LmnMembrane(){
// delete in proxies connected each other
AtomListEntryRef ent;
LmnSymbolAtomRef i0;

ent = this->get_atomlist(LMN_IN_PROXY_FUNCTOR);

BOOL flag = TRUE;
do{
flag = FALSE;
EACH_ATOM(i0, ent, ({
LmnSymbolAtomRef i1;

if (i0->get_functor() == LMN_RESUME_FUNCTOR)
continue;

if (LMN_ATTR_IS_DATA(i0->get_attr(1))){
break;
}
i1 = (LmnSymbolAtomRef)i0->get_link(1);
if (i1->get_functor() == LMN_IN_PROXY_FUNCTOR){
LmnSymbolAtomRef o0 =
(LmnSymbolAtomRef)i0->get_link(0);
LmnSymbolAtomRef o1 =
(LmnSymbolAtomRef)i1->get_link(0);
ent->remove(o0);
ent->remove(o1);
lmn_delete_atom(o0);
lmn_delete_atom(o1);
lmn_mem_unify_atom_args(this->mem_parent(), o0, 1, o1, 1);
ent->remove(i0);
ent->remove(i1);
flag = TRUE;
break;
}
}));
} while (flag);

/* free all atomlists */
for (int i = 0; i < max_functor; i++) {
if (!this->atomset[i])
Expand Down

0 comments on commit 0e59b7b

Please sign in to comment.