diff options
author | Akira TAGOH <akira@tagoh.org> | 2011-03-17 00:00:08 +0900 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2011-03-17 00:00:08 +0900 |
commit | 21ac0e34188e4e624a683bef818e165c9f187ad4 (patch) | |
tree | e064e07330e0e1d8ff6b3b2345168309ae647b14 | |
parent | 4541c793bc14c7d6a43bc680925742f6b7a5d8e4 (diff) |
* lock the file object when attaching.
* mark the file object in GC
-rw-r--r-- | hieroglyph/hglineedit.l | 17 |
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; } |