| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
Hashes that compare by identity care about the location of the object in
memory. Since they care about the memory location, we can't let them
move.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Nobody uses this function other than gc.c. We only need
RVALUE_PINNED().
|
| |
|
| |
|
|
|
|
|
| |
pinned_bits are not used frequently (only GC.compact use it) so
move it at the end of struct heap_page.
|
|
|
|
|
| |
Usually PINNED_BITS are not needed (only for GC.compact need it)
so skip updating PINNED_BITS if the marking is not by GC.compact.
|
|
|
|
|
|
|
|
| |
pointers.
Instead of 4fe908c1643c3f355edd787bb651aefb53b996c0, just locking the MJIT
worker may be fine for this case. And also we might have the same issue
in all `gc_compact_after_gc` calls.
|
|
|
|
|
| |
As ko1 added some improvements on GC.compact, I want to check if it
solved the problem too.
|
|
|
|
|
|
|
| |
rb_gc_finalize_deferred() is remained for compatibility with
C-extensions. However, this function is no longer working
from Ruby 2.4 (crash with SEGV immediately).
So remove it completely.
|
|
|
|
|
| |
Here malloc() is enough because all elements of the page_list
will be overwrite.
|
| |
|
|
|
|
|
|
| |
The size of page_list is heap_eden->total_pages, but
init_cursors() assumes the size of page_list is `heap_allocated_pages`.
This patch fix it.
|
|
|
|
|
|
|
|
| |
`heap_pages_sorted` includes eden and tomb pages, so we should not
use tomb pages for GC.compact (or we should move all of tomb pages
into eden pages). Now, I choose only eden pages. If we allow to
move Zombie objects (objects waiting for finalizers), we should
use both type of pages (TODO).
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Fix debug output to dump more useful information on GC.compact
debugging.
check_rvalue_consistency_force() now accepts `terminate` flag
to terminate a program with rb_bug() or only print error message.
GC.verify_internal_consistency use this flag (== FALSE) to dump
all of debug output.
|
|
|
|
|
|
|
|
|
| |
is_pointer_to_heap(obj) checks this obj belong to a heap page.
However, this function returns TRUE even if the page is tomb page.
This is re-commit of [712c027524].
heap_page_add_freeobj() should not use is_pointer_to_heap(), but
should check more explicitly.
|
| |
|
|
|
|
| |
This reverts commit 712c027524e3a03500b3098d950fc2f0608ce897.
|
|
|
|
|
|
|
|
| |
GC.verify_internal_consistency() checks health of each RVALUE with
check_rvalue_consistency(). However, this function is enabled
only on debug environment (RGENGC_CHECK_MODE>1). So introduce
new function check_rvalue_consistency_force() and use it
in GC.verify_internal_consistency.
|
|
|
|
|
|
| |
is_pointer_to_heap() checks if it is in valid pointer to the
RVALUE in any heap_page_body. However, it returns true if it
points tomb pages. This patch check it points to eden pages.
|
| |
|
|
|
|
|
| |
for debugging
http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2048247
|
| |
|
|
|
|
| |
requested by Ko1.
|
|
|
|
|
|
| |
Caller of gc_pin() should check it is a mark-able object.
So gc_pin() doesn't need to check it. With this fix,
we can refactoring around it.
|
|
|
|
| |
rb_gc() no longer invokes finalizers, so there are T_ZOMBE objects.
|
|
|
|
|
| |
Objects pointed by "maybe" pointers because of conservative marking
should be pinned down.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
rb_gc() kicks gc_finalize_deferred(), which invokes finalizers.
This means that any Ruby program can be run this point and
it may be thread switching points and so on.
However, it is difficult to think it invokes any Ruby programs.
For example, `GC.compact` use `rb_gc()` to implement it, howver,
any Ruby program must not be run on this timing.
For this reason (it is difficult to image it run any Ruby program),
I removed `gc_finalize_deferred()` line in rb_gc().
This patch solves GC.compact issue.
[Bug #15809] and re-enable GC.compact test.
|
| |
|
|
|
|
|
| |
* gc.c (rb_raw_obj_info): new string objects cannot allocate to
create new class path name during GC.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* variable.c: make the hidden ivars `classpath` and `tmp_classpath` the source
of truth for module and constant names. Assign to them when modules are bind
to constants.
* variable.c: remove references to module name cache, as what used to be the cache
is now the source of truth. Remove rb_class_path_no_cache().
* variable.c: remove the hidden ivar `classid`. This existed for the purposes of
module name search, which is now replaced. Also, remove the associated
rb_name_class().
* class.c: use rb_set_class_path_string to set the name of Object during boot.
Must use a fstring as this runs before rb_cString is initialized and
creating a normal string leads to a VALUE without a class.
* spec/ruby/core/module/name_spec.rb: add a few specs to specify what happens
to Module#name across multiple operations. These specs pass without other
code changes in this commit.
[Feature #15765]
|
| |
|
| |
|
| |
|
|
|
|
|
| |
The function will return new or existing locations depending on whether
or not the object actually moved, so give it a more appropriate name.
|
| |
|
|
|
|
|
|
|
|
| |
If a dynamic symbol has been converted to a static symbol, it gets added
to the global ID list and should no longer move. C extensions can pass
symbols to rb_sym2id and those symbols should no longer be movable.
When the symbol is passed to rb_sym2id, the `id` member is set, so we
can use its existence to prevent movement.
|
|
|
|
|
|
|
|
| |
`transient_heap_evacuate()` disables GC using `rb_gc_disable()`
to prohibt GC invocation because of new allocation for evacuated
memory. However, `rb_gc_disable()` sweep all rest of unswept pages.
We don't need to cancel lazy sweep so this patch introduce
`rb_gc_disable_no_rest()` which doesn't cancel lazy sweep.
|
| |
|
| |
|
|
|
|
|
| |
because @ko1 said "gc_finish" is confusing like a finish of entire GC
process
|
| |
|
| |
|