summaryrefslogtreecommitdiff
path: root/gc.c
AgeCommit message (Collapse)Author
2019-06-03remove `rb_objspace_pinned_object_p()`Koichi Sasada
Nobody uses this function other than gc.c. We only need RVALUE_PINNED().
2019-05-30* expand tabs.git
2019-05-30reorder bitmap clearing.Koichi Sasada
2019-05-30move pinned_bits[] position in struct heap_page.Koichi Sasada
pinned_bits are not used frequently (only GC.compact use it) so move it at the end of struct heap_page.
2019-05-30introduce `during_compacting` flag.Koichi Sasada
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.
2019-05-29Prevent MJIT compilation from running while movingTakashi Kokubun
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.
2019-05-29Drop MJIT debug code from GC.compactTakashi Kokubun
As ko1 added some improvements on GC.compact, I want to check if it solved the problem too.
2019-05-28remove obsolete rb_gc_finalize_deferred().Koichi Sasada
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.
2019-05-28use malloc() instead of calloc().Koichi Sasada
Here malloc() is enough because all elements of the page_list will be overwrite.
2019-05-28should skip T_ZOMBIE here.Koichi Sasada
2019-05-28should use heap_eden->total_pages.Koichi Sasada
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.
2019-05-28use only eden_heaps on GC.compact.Koichi Sasada
`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).
2019-05-28Suppress warning (uninitialized variable).Koichi Sasada
2019-05-27check the object is in tomb_heap.Koichi Sasada
2019-05-27add a space between type and othersKoichi Sasada
2019-05-27add a line break for each error messageKoichi Sasada
2019-05-27fix GC.verify_internal_consistency.Koichi Sasada
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.
2019-05-27is_pointer_to_heap() checks also tomb or not.Koichi Sasada
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.
2019-05-24* expand tabs.git
2019-05-24Revert "check it in eden or tomb."Kazuhiro NISHIYAMA
This reverts commit 712c027524e3a03500b3098d950fc2f0608ce897.
2019-05-24check RVALUE on verifier.Koichi Sasada
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.
2019-05-24check it in eden or tomb.Koichi Sasada
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.
2019-05-24add separation char on rb_obj_info(imemo obj)Koichi Sasada
2019-05-23gc.c: Try pausing MJIT worker during GC.verify_compaction_referencesTakashi Kokubun
for debugging http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2048247
2019-05-23add verifier before compactKoichi Sasada
2019-05-23prefix ASAN related inline functions asan_Urabe, Shyouhei
requested by Ko1.
2019-05-23gc_pin() doesn't check is_markable_object().Koichi Sasada
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.
2019-05-23skip zombies.Koichi Sasada
rb_gc() no longer invokes finalizers, so there are T_ZOMBE objects.
2019-05-23pin `maybe` pointers.Koichi Sasada
Objects pointed by "maybe" pointers because of conservative marking should be pinned down.
2019-05-23Do not kick finalizers on rb_gc().Koichi Sasada
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.
2019-05-22* expand tabs.git
2019-05-22gc.c: revert b00f280d4b "Eagerly name modules and classes"Nobuyoshi Nakada
* gc.c (rb_raw_obj_info): new string objects cannot allocate to create new class path name during GC.
2019-05-22Eagerly name modules and classesAlan Wu
* 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]
2019-05-21unify normal and verify ver.Koichi Sasada
2019-05-20* expand tabs.git
2019-05-20Get rid of undefined behavior that source and destination buffers overlapNobuyoshi Nakada
2019-05-18Rename rb_gc_new_location to rb_gc_locationAaron Patterson
The function will return new or existing locations depending on whether or not the object actually moved, so give it a more appropriate name.
2019-05-18Add fall through comment for Coverity ScanKazuhiro NISHIYAMA
2019-05-17Prevent Dynamic -> Static symbols from movingAaron Patterson
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.
2019-05-16don't need to sweep rest.Koichi Sasada
`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.
2019-05-16Prefix global_symbols with `ruby_`Nobuyoshi Nakada
2019-05-16Make internal functions staticNobuyoshi Nakada
2019-05-15Rename mjit_gc_finish_hook to mjit_gc_exit_hookTakashi Kokubun
because @ko1 said "gc_finish" is confusing like a finish of entire GC process
2019-05-15Suppress unused-but-set-variable warningNobuyoshi Nakada
2019-05-15unpin finalizers and update referencesAaron Patterson
2019-05-15* expand tabs.git
2019-05-14Add object packing strategies for compactionAaron Patterson
This commit adds an alternative packing strategy for compaction. Instead of packing towards "most pinned" pages, we can pack towards "most empty" pages. The idea is that we can double the heap size, then pack all objects towards the empty side of the heap. This will ensure maximum chaos for testing / verification.
2019-05-14Fixing function nameAaron Patterson
This function is used for marking / pinning vm stack values, so it should have "vm" in the function name to be more clear.
2019-05-13turn T_MOVED in to a linked listAaron Patterson
2019-05-13Don't run the compactor if GC is disabledAaron Patterson
GC is required for pinning / marking objects. If the compactor runs without pinning everything, then it will blow up, so just return early if the GC is disabled.