Skip to content

Instantly share code, notes, and snippets.

@tenderlove
Created June 24, 2020 20:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tenderlove/12ffa597d006854173de9ff6564dea73 to your computer and use it in GitHub Desktop.
Save tenderlove/12ffa597d006854173de9ff6564dea73 to your computer and use it in GitHub Desktop.
def segv_handler(info)
# Only triggered if someone tried to read from a MOVED location
move_all_objects_back(find_page(info.read_address))
end
def compact
register_segv_handler :segv_handler
ruby_heap.pages.each do |page|
move_objects_on(page)
mprotect(page)
end
ruby_heap.pages.each do |page|
update_references(page)
end
ruby_heap.pages.each do |page|
move_objects_on(page)
unprotect(page)
end
unregister_segv_handler :segv_handler
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment