Bug #17652
Updated by peterzhu2118 (Peter Zhu) almost 4 years ago
# GitHub PR: ~~https://github.com/ruby/ruby/pull/4221~~ ~https://github.com/ruby/ruby/pull/4221~ https://github.com/ruby/ruby/pull/4227 # Issue GC compaction will crash on some pages due to a failing `mprotect` call. According to the `mprotect` documentation: > POSIX says that the behavior of mprotect() is unspecified if it is applied to a region of memory that was not obtained via mmap(2). This causes `mprotect` to sometimes fail. # Reproduction ```ruby GC.auto_compact = true times = 20_000_000 arr = Array.new(times) times.times do |i| arr[i] = "#{i}" end arr = Array.new(1_000_000, 42) GC.start puts "ok" ``` # Expected output Program runs and prints "ok". # Actual output Crashes on Ubuntu 18.04. See `crash.log` for the crash log (note that the log file has been truncated because it's too big).