Project

General

Profile

Bug #17652

Updated by peterzhu2118 (Peter Zhu) about 3 years ago

# GitHub PR: ~https://github.com/ruby/ruby/pull/4221~ https://github.com/ruby/ruby/pull/4227 https://github.com/ruby/ruby/pull/4221 

 # 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). 

Back