summaryrefslogtreecommitdiff
path: root/gc.c
AgeCommit message (Collapse)Author
2024-09-30Move RUBY_INTERNAL_EVENT_FREEOBJ into GC implementationPeter Zhu
Instead of calling rb_gc_event_hook inside of rb_gc_obj_free, it should be up to the GC implementation to call the event. Notes: Merged: https://github.com/ruby/ruby/pull/11742
2024-09-30Fix the last character index in an assertionNobuyoshi Nakada
Also, when `RUBY_DEBUG` is enabled, objects allocated in shared-gc fail at `rb_ractor_confirm_belonging`, so assert it always.
2024-09-30Ruby exception cannot work hereNobuyoshi Nakada
Just show error messages then ignore the invalid library.
2024-09-30Raise fatal error instead of BUGNobuyoshi Nakada
Failures due to the external setting is not a bug of ruby itself. Notes: Merged: https://github.com/ruby/ruby/pull/11726
2024-09-19Remove rb_gc_impl_initial_stress_setPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11646
2024-09-18Move more of GC.latest_gc_info into RubyPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11636
2024-09-18Change rb_gc_impl_get_measure_total_time to return a boolPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11638
2024-09-17Make rb_gc_impl_set_measure_total_time return voidPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11637
2024-09-17Rename rb_gc_impl_get_profile_total_time to rb_gc_impl_get_total_timePeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11639
2024-09-17Change rb_gc_impl_get_profile_total_time to return unsigned long longPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11639
2024-09-12Move checks for heap traversal to rb_gc_mark_weakPeter Zhu
If we are during heap traversal, we don't want to call rb_gc_impl_mark_weak. This commit moves that check from rb_gc_impl_mark_weak to rb_gc_mark_weak. Notes: Merged: https://github.com/ruby/ruby/pull/11606
2024-09-12Assert that we are during GC when markingPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11606
2024-09-12Add variable objspace in RB_GC_MARK_OR_TRAVERSEPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11606
2024-09-12Move special const checks to rb_gc_mark_weakPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11606
2024-09-09Suppress discards qualifiers warning with ASNNobuyoshi Nakada
2024-09-07[Bug #20718] Free non-`RTypedData` objectsJonathan Calvert
Allow objects that are not of type `RTypedData` to use the default free function, as `RTYPEDDATA_EMBEDDED_P` can return a false positive when casting non-`RTypedData` objects. Notes: Merged: https://github.com/ruby/ruby/pull/11563 Merged-By: nobu <[email protected]>
2024-09-03Don't traverse garbage objects in heap traversalPeter Zhu
The object could be garbage (e.g. T_NONE, T_MOVED, or T_ZOMBIE) so we don't want to traverse those.
2024-09-03Move responsibility of heap walking into RubyPeter Zhu
This commit removes the need for the GC implementation to implement heap walking and instead Ruby will implement it. Notes: Merged: https://github.com/ruby/ruby/pull/11511
2024-08-30Fix call to each_location_ptr for ASANPeter Zhu
2024-08-30Combine gc_mark_locations and each_stack_locationPeter Zhu
Also renames the new function each_location_ptr to be consistent with each_location. Notes: Merged: https://github.com/ruby/ruby/pull/11504
2024-08-30Drop support for Motorola 68000Peter Zhu
The last Motorla 68000 architecture CPU was released 1994, so we can probably drop support for it. Notes: Merged: https://github.com/ruby/ruby/pull/11504
2024-08-29Remove unused ec argument in each_stack_locationPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11503
2024-08-29Change each_stack_location to accept data instead of objspacePeter Zhu
The callers were abusing each_stack_location and passing data into the objspace argument. Notes: Merged: https://github.com/ruby/ruby/pull/11481
2024-08-29Change each_location to accept data instead of objspacePeter Zhu
The callers were abusing each_location and passing data into the objspace argument. Notes: Merged: https://github.com/ruby/ruby/pull/11481
2024-08-29Move checks for special const for markingPeter Zhu
This commit moves checks to RB_SPECIAL_CONST_P out of the GC implmentation and into gc.c. Notes: Merged: https://github.com/ruby/ruby/pull/11478
2024-08-29Move marking code together in gc.cPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11478
2024-08-22Don't use gc_impl.h inside of gc/gc.hPeter Zhu
Using gc_impl.h inside of gc/gc.h will cause gc/gc.h to use the functions in gc/default.c when builing with shared GC support because gc/gc.h is included into gc.c before the rb_gc_impl functions are overridden by the preprocessor. Notes: Merged: https://github.com/ruby/ruby/pull/11423
2024-08-15Fix GC_ASSERT for gc.c and gc/default.cPeter Zhu
gc.c mistakenly defined GC_ASSERT as blank, which caused it to be a no-op. This caused all assertions in gc.c and gc/default.c to not do anything. This commit fixes it by moving the definition of GC_ASSERT to gc/gc.h. Notes: Merged: https://github.com/ruby/ruby/pull/11377
2024-08-14[DOC] Update comment about how object ID is calculatedPeter Zhu
The object ID no longer treats symbols in a special way so we can simplify the comment about how it is calculated. Notes: Merged: https://github.com/ruby/ruby/pull/11346
2024-08-13Don't set stack end in rb_gc_mark_rootsPeter Zhu
We don't need to set the stack end in rb_gc_mark_roots because it is already set in mark_current_machine_context. Notes: Merged: https://github.com/ruby/ruby/pull/11355
2024-08-09Remove rb_gc_impl_objspace_markPeter Zhu
It's not necessary for the GC implementation to call rb_gc_mark_roots which calls back into the GC implementation's rb_gc_impl_objspace_mark. Notes: Merged: https://github.com/ruby/ruby/pull/11325
2024-08-08Make YJIT a GC root rather than an object (#11343)Peter Zhu
YJIT currently uses the YJIT root object to mark objects during GC and update references during compaction. This object otherwise serves no purpose. This commit changes it YJIT to be step when marking the GC root. This saves some memory from being allocated from the system and the GC. Notes: Merged-By: maximecb <[email protected]>
2024-07-26Fix a -Wmaybe-uninitializedAlan Wu
With the body of functions available, GCC noticed that lev is uninitialized in rb_gc_vm_lock_no_barrier() in single ractor mode.
2024-07-26Put the default GC implementation back into gc.oAlan Wu
We discovered that having gc.o and gc_impl.o in separate translation units diminishes codegen quality with GCC 11 on x86-64. This commit solves that problem by including default/gc.c into gc.c, letting the optimizer have visibility into the body of functions again in builds not using link-time optimization, which are common. This effectively restores things to the way they were before [Feature #20470] from the optimizer's perspective while maintaining the ability to build gc/default.c as a DSO. There were a few functions duplicated across gc.c and gc/default.c. Extract them and put them into gc/gc.h.
2024-07-22newobj_of(): Use parameter instead of GET_RACTOR()Alan Wu
No point repeating the work callers to this function already do. Notes: Merged: https://github.com/ruby/ruby/pull/11224
2024-07-22Add newline when printing dlopen error messagePeter Zhu
2024-07-19Move frozen check out of rb_gc_impl_undefine_finalizerPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11199
2024-07-19Make rb_gc_impl_undefine_finalizer return voidPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11199
2024-07-19Move return value of rb_define_finalizer outPeter Zhu
Moves return value logic of rb_define_finalizer out from rb_gc_impl_define_finalizer. Notes: Merged: https://github.com/ruby/ruby/pull/11199
2024-07-19Make define_final call rb_define_finalizerPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/11199
2024-07-15Add gc/gc.h for functions in gc.c and used by GC implementationsPeter Zhu
2024-07-12Provide GC.config to disable major GC collectionsMatt Valentine-House
This feature provides a new method `GC.config` that configures internal GC configuration variables provided by an individual GC implementation. Implemented in this PR is the option `full_mark`: a boolean value that will determine whether the Ruby GC is allowed to run a major collection while the process is running. It has the following semantics This feature configures Ruby's GC to only run minor GC's. It's designed to give users relying on Out of Band GC complete control over when a major GC is run. Configuring `full_mark: false` does two main things: * Never runs a Major GC. When the heap runs out of space during a minor and when a major would traditionally be run, instead we allocate more heap pages, and mark objspace as needing a major GC. * Don't increment object ages. We don't promote objects during GC, this will cause every object to be scanned on every minor. This is an intentional trade-off between minor GC's doing more work every time, and potentially promoting objects that will then never be GC'd. The intention behind not aging objects is that users of this feature should use a preforking web server, or some other method of pre-warming the oldgen (like Nakayoshi fork)before disabling Majors. That way most objects that are going to be old will have already been promoted. This will interleave major and minor GC collections in exactly the same what that the Ruby GC runs in versions previously to this. This is the default behaviour. * This new method has the following extra semantics: - `GC.config` with no arguments returns a hash of the keys of the currently configured GC - `GC.config` with a key pair (eg. `GC.config(full_mark: true)` sets the matching config key to the corresponding value and returns the entire known config hash, including the new values. If the key does not exist, `nil` is returned * When a minor GC is run, Ruby sets an internal status flag to determine whether the next GC will be a major or a minor. When `full_mark: false` this flag is ignored and every GC will be a minor. This status flag can be accessed at `GC.latest_gc_info(:needs_major_by)`. Any value other than `nil` means that the next collection would have been a major. Thus it's possible to use this feature to check at a predetermined time, whether a major GC is necessary and run one if it is. eg. After a request has finished processing. ```ruby if GC.latest_gc_info(:needs_major_by) GC.start(full_mark: true) end ``` [Feature #20443]
2024-07-12Add gc/gc_impl.h for GC implementation headersPeter Zhu
2024-07-12give up USE_GC_MALLOC_OBJ_INFO_DETAILS卜部昌平
This feature is no longer possible under current design; now that our GC is pluggable, we cannot assume what was achieved by this compiler flag is always possble by the dynamically-loaded GC implementation.
2024-07-10Allow miniruby to load shared GCPeter Zhu
Since dln.c is replaced with dmydln.c for miniruby, we cannot load shared GC for miniruby. This means that many tests do not have the shared GC loaded and many tests fail because of the warning that emits in miniruby. This commit changes shared GC to directly use dlopen for loading the shared GC.
2024-07-05Change external GC to use directory at configurePeter Zhu
This commit changes the external GC API to use `--with-shared-gc=DIR` at configure time with a directory of the external GC and uses `RUBY_GC_LIBRARY` environment variable to load the external GC at runtime.
2024-07-05Revert "Load external GC using command line argument"Peter Zhu
This reverts commit 8ddb1110c283c5cb59b6582383f36fdbcc43ab19.
2024-07-03Remove unused gc_raw_obj_info_basicPeter Zhu
2024-07-03Remove unused obj_info_basicPeter Zhu
2024-07-03Fix ASAN buildsPeter Zhu