[#98098] [Ruby master Feature#16824] Follow RubyGems naming conventions for the stdlib — shannonskipper@...

Issue #16824 has been reported by shan (Shannon Skipper).

14 messages 2020/05/01

[#98147] [Ruby master Feature#16832] Use #name rather than #inspect to build "uninitialized constant" error messages — jean.boussier@...

Issue #16832 has been reported by byroot (Jean Boussier).

20 messages 2020/05/06

[#98174] [Ruby master Bug#16837] Can we make Ruby 3.0 as fast as Ruby 2.7 with the new assertions? — takashikkbn@...

Issue #16837 has been reported by k0kubun (Takashi Kokubun).

10 messages 2020/05/07

[#98241] [Ruby master Bug#16845] Building Ruby with old existing system Ruby results in make error with ./tool/file2lastrev.rb — erik@...

Issue #16845 has been reported by ErikSwan (Erik Swan).

7 messages 2020/05/09

[#98256] [Ruby master Feature#16847] Cache instruction sequences by default — jean.boussier@...

Issue #16847 has been reported by byroot (Jean Boussier).

16 messages 2020/05/11

[#98257] [Ruby master Feature#16848] Allow callables in $LOAD_PATH — jean.boussier@...

Issue #16848 has been reported by byroot (Jean Boussier).

27 messages 2020/05/11

[#98318] [Ruby master Bug#16853] calling bla(hash, **kw) with a string-based hash passes the strings into **kw (worked < 2.7) — sylvain.joyeux@...4x.org

Issue #16853 has been reported by sylvain.joyeux (Sylvain Joyeux).

12 messages 2020/05/13

[#98355] [Ruby master Bug#16889] TracePoint.enable { ... } also activates the TracePoint for other threads, even outside the block — eregontp@...

Issue #16889 has been reported by Eregon (Benoit Daloze).

16 messages 2020/05/14

[#98363] [Ruby master Feature#16891] Restore Positional Argument to Keyword Conversion — merch-redmine@...

Issue #16891 has been reported by jeremyevans0 (Jeremy Evans).

23 messages 2020/05/14

[#98371] [Ruby master Feature#16894] Integer division for Ruby 3 — andrew@...

Issue #16894 has been reported by ankane (Andrew Kane).

18 messages 2020/05/15

[#98391] [Ruby master Bug#16896] MakeMakefile methods should be private — eregontp@...

Issue #16896 has been reported by Eregon (Benoit Daloze).

10 messages 2020/05/15

[#98396] [Ruby master Feature#16897] Can a Ruby 3.0 compatible general purpose memoizer be written in such a way that it matches Ruby 2 performance? — sam.saffron@...

Issue #16897 has been reported by sam.saffron (Sam Saffron).

25 messages 2020/05/16

[#98453] [Ruby master Bug#16904] rubygems: psych: superclass mismatch for class Mark (TypeError) — jaruga@...

Issue #16904 has been reported by jaruga (Jun Aruga).

18 messages 2020/05/20

[#98486] [Ruby master Bug#16908] Strange behaviour of Hash#shift when used with `default_proc`. — samuel@...

Issue #16908 has been reported by ioquatix (Samuel Williams).

14 messages 2020/05/23

[#98569] [Ruby master Bug#16921] s390x: ramdom test failures for timeout or segmentation fault — jaruga@...

Issue #16921 has been reported by jaruga (Jun Aruga).

9 messages 2020/05/29

[#98599] [Ruby master Bug#16926] Kernel#require does not load a feature twice when $LOAD_PATH has been modified spec fails only on 2.7 — eregontp@...

Issue #16926 has been reported by Eregon (Benoit Daloze).

12 messages 2020/05/31

[ruby-core:98188] [Ruby master Feature#16761] Add an API to move the entire heap, as to make testing GC.compact compatibility easier

From: tenderlove@...
Date: 2020-05-07 16:03:29 UTC
List: ruby-core #98188
Issue #16761 has been updated by tenderlovemaking (Aaron Patterson).


We currently have this functionality, but the API isn't as nice as what you propose (and the naming isn't great either).

You can do `GC.verify_compaction_references(toward: :empty, double_heap: true)`.  It will double the size of the heap, then pack towards empty pages which will ensure that any object that can move will move.  Maybe we should change the name to `debug_compaction` with options?

I'd like to add some other debugging options.  For example, if an object doesn't update references correctly another object can be allocated in to the slot.  E.g:

A -> B
C -> B

Maybe B moves and C updates it's references but A does not.  If a new object D is allocated in the slot where B *used* to live, then we could end up with:

A -> D
C -> B

I have a way to debug this locally, but no good solution for upstream yet.  It's probably off topic for this issue, but my point is that we have multiple techniques for debugging this so I think a method that takes options is best

----------------------------------------
Feature #16761: Add an API to move the entire heap, as to make testing GC.compact compatibility easier
https://bugs.ruby-lang.org/issues/16761#change-85428

* Author: byroot (Jean Boussier)
* Status: Open
* Priority: Normal
----------------------------------------
We recently started testing GC.compact effectiveness in production, and one challenge we faced was to ensure that C extensions were compatible with it.

Here's two examples of C-extensions which caused various issues, and their respective fixes:

  - https://github.com/Shopify/liquid-c/pull/55
  - https://github.com/brianmario/mysql2/pull/1115

Every time the fix is quite straightforward, my problem is that it's almost impossible to write a reliable test case for it.

With liquid-c I was able to reproduce the issue fairly constantly by calling `GC.compact` after loading the extension,
but for some reason I was totally unable to do the same with `mysql2`. And even in production, the issue would only happen on a small number of processes.

This makes me believe that having a debug method to move **all** objects on the heap would be very useful in this scenarios.
There is already several `GC.verify_*` method intended to be used in debug scenarios, so there's precedent.

I think something like `GC.move_all_the_heap` would make such testing much easier. e.g.

```
require 'c-ext'
GC.move_all_the_heap

# run the library tests
```

cc @tenderlovemaking



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next