* gc.c (gc_start): force to invoke GC by GC.start

even if it is GC.disable'd.

* test/ruby/test_gc.rb: add a test.




git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2015-11-19 12:57:20 +00:00
Родитель d5d997fa11
Коммит 121b6e064a
3 изменённых файлов: 20 добавлений и 2 удалений

Просмотреть файл

@ -1,3 +1,10 @@
Thu Nov 19 21:55:11 2015 Koichi Sasada <ko1@atdot.net>
* gc.c (gc_start): force to invoke GC by GC.start
even if it is GC.disable'd.
* test/ruby/test_gc.rb: add a test.
Thu Nov 19 20:08:59 2015 Koichi Sasada <ko1@atdot.net>
* gc.c: trivial performance improvements.

2
gc.c
Просмотреть файл

@ -6159,7 +6159,7 @@ gc_start(rb_objspace_t *objspace, const int full_mark, const int immediate_mark,
objspace->flags.immediate_sweep = immediate_sweep;
if (!heap_allocated_pages) return FALSE; /* heap is not ready */
if (!ready_to_gc(objspace)) return TRUE; /* GC is not allowed */
if (reason != GPR_FLAG_METHOD && !ready_to_gc(objspace)) return TRUE; /* GC is not allowed */
if (RGENGC_CHECK_MODE) {
assert(objspace->flags.stat == gc_stat_none);

Просмотреть файл

@ -385,4 +385,15 @@ class TestGc < Test::Unit::TestCase
C.new
end;
end
def test_gc_disabled_start
begin
disabled = GC.disable
c = GC.count
GC.start
assert_equal 1, GC.count - c
ensure
GC.enable unless disabled
end
end
end