diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | io.c | 4 |
2 files changed, 8 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Sun Feb 16 12:46:47 2014 Eric Wong <e@80x24.org> + + * io.c (rb_f_backquote): trade volatile for manual recycle + rb_gc_force_recycle ensures object is visible until recycle + Sun Feb 16 11:55:14 2014 Eric Wong <e@80x24.org> * marshal.c (marshal_dump): use rb_gc_force_recycle for GC-safety @@ -8227,7 +8227,7 @@ argf_readlines(int argc, VALUE *argv, VALUE argf) static VALUE rb_f_backquote(VALUE obj, VALUE str) { - volatile VALUE port; + VALUE port; VALUE result; rb_io_t *fptr; @@ -8239,6 +8239,8 @@ rb_f_backquote(VALUE obj, VALUE str) GetOpenFile(port, fptr); result = read_all(fptr, remain_size(fptr), Qnil); rb_io_close(port); + rb_io_fptr_finalize(fptr); + rb_gc_force_recycle(port); /* also guards from premature GC */ return result; } |