diff options
author | Aaron Patterson <tenderlove@ruby-lang.org> | 2021-05-25 16:20:52 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2021-05-25 17:37:21 -0700 |
commit | fc832ffbfaf581ff63ef40dc3f4ec5c8ff39aae6 (patch) | |
tree | ac528ef22bbf535b005956d6d813cc36ddcd4500 /test/ruby/test_gc_compact.rb | |
parent | 2a29a5311ce34bcbd0186455df2d5b724dcc501c (diff) | |
download | ruby-fc832ffbfaf581ff63ef40dc3f4ec5c8ff39aae6.tar.gz |
Disable compaction on platforms that can't support it
Manual compaction also requires a read barrier, so we need to disable
even manual compaction on platforms that don't support mprotect.
[Bug #17871]
Diffstat (limited to 'test/ruby/test_gc_compact.rb')
-rw-r--r-- | test/ruby/test_gc_compact.rb | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/test/ruby/test_gc_compact.rb b/test/ruby/test_gc_compact.rb index 8dfa66a177..7d8bde04f8 100644 --- a/test/ruby/test_gc_compact.rb +++ b/test/ruby/test_gc_compact.rb @@ -4,12 +4,32 @@ require 'fiddle' require 'etc' class TestGCCompact < Test::Unit::TestCase - class AutoCompact < Test::Unit::TestCase + module SupportsCompact def setup skip "autocompact not supported on this platform" unless supports_auto_compact? super end + private + + def supports_auto_compact? + return true unless defined?(Etc::SC_PAGE_SIZE) + + begin + return GC::INTERNAL_CONSTANTS[:HEAP_PAGE_SIZE] % Etc.sysconf(Etc::SC_PAGE_SIZE) == 0 + rescue NotImplementedError + rescue ArgumentError + end + + true + end + end + + include SupportsCompact + + class AutoCompact < Test::Unit::TestCase + include SupportsCompact + def test_enable_autocompact before = GC.auto_compact GC.auto_compact = true @@ -59,26 +79,17 @@ class TestGCCompact < Test::Unit::TestCase ensure GC.auto_compact = before end - - private - - def supports_auto_compact? - return true unless defined?(Etc::SC_PAGE_SIZE) - - begin - return GC::INTERNAL_CONSTANTS[:HEAP_PAGE_SIZE] % Etc.sysconf(Etc::SC_PAGE_SIZE) == 0 - rescue NotImplementedError - rescue ArgumentError - end - - true - end end def os_page_size return true unless defined?(Etc::SC_PAGE_SIZE) end + def setup + skip "autocompact not supported on this platform" unless supports_auto_compact? + super + end + def test_gc_compact_stats list = [] |