summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2011-03-17 00:00:08 +0900
committerAkira TAGOH <akira@tagoh.org>2011-03-17 00:00:08 +0900
commit21ac0e34188e4e624a683bef818e165c9f187ad4 (patch)
treee064e07330e0e1d8ff6b3b2345168309ae647b14
parent4541c793bc14c7d6a43bc680925742f6b7a5d8e4 (diff)
* lock the file object when attaching.
* mark the file object in GC
-rw-r--r--hieroglyph/hglineedit.l17
1 files changed, 16 insertions, 1 deletions
diff --git a/hieroglyph/hglineedit.l b/hieroglyph/hglineedit.l
index d54b74e..e28e80f 100644
--- a/hieroglyph/hglineedit.l
+++ b/hieroglyph/hglineedit.l
@@ -266,7 +266,11 @@ hg_lineedit_new(hg_mem_t *mem,
retval->qself = q;
retval->mem = mem;
retval->vtable = vtable;
+ if (infile)
+ hg_mem_lock_object(infile->o.mem, infile->o.self);
retval->infile = infile;
+ if (outfile)
+ hg_mem_lock_object(outfile->o.mem, outfile->o.self);
retval->outfile = outfile;
yylex_init(&retval->yyscanner);
@@ -454,6 +458,8 @@ hg_lineedit_set_infile(hg_lineedit_t *lineedit,
hg_mem_unlock_object(lineedit->infile->o.mem,
lineedit->infile->o.self);
+ hg_mem_lock_object(infile->o.mem,
+ infile->o.self);
lineedit->infile = infile;
}
@@ -475,6 +481,8 @@ hg_lineedit_set_outfile(hg_lineedit_t *lineedit,
hg_mem_unlock_object(lineedit->outfile->o.mem,
lineedit->outfile->o.self);
+ hg_mem_lock_object(outfile->o.mem,
+ outfile->o.self);
lineedit->outfile = outfile;
}
@@ -491,5 +499,12 @@ hg_lineedit_gc_mark(hg_lineedit_t *lineedit)
{
hg_return_val_if_fail (lineedit != NULL, FALSE, HG_e_VMerror);
- return hg_mem_gc_mark(lineedit->mem, lineedit->qself);
+ if (!hg_mem_gc_mark(lineedit->mem, lineedit->qself))
+ return FALSE;
+ if (!hg_mem_gc_mark(lineedit->infile->o.mem, lineedit->infile->o.self))
+ return FALSE;
+ if (!hg_mem_gc_mark(lineedit->outfile->o.mem, lineedit->outfile->o.self))
+ return FALSE;
+
+ return TRUE;
}