summaryrefslogtreecommitdiff
path: root/include/ruby/internal/gc.h
AgeCommit message (Collapse)Author
2025-12-26Remove `rb_gc_force_recycle` deprecated as "removed soon"Nobuyoshi Nakada
2025-12-16gc.h: Reintroduce immediate guard in `rb_obj_written`Jean Boussier
This guard was removed in https://github.com/ruby/ruby/pull/13497 on the justification that some GC may need to be notified even for immediate. But the two currently available GCs don't, and there are plenty of assumtions GCs don't everywhere, notably in YJIT and ZJIT. This optimization is also not so micro (but not huge either). I routinely see 1-2% wasted there on micro-benchmarks. So perhaps if in the future we actually need this, it might make sense to introduce a way for GCs to declare that as an option, but in the meantime it's extra overhead with little gain.
2025-06-03Allow pass special constants to the write barrierPeter Zhu
Some GC implementations want to always know when an object is written to, even if the written value is a special constant. Checking special constants in rb_obj_written was a micro-optimization that made assumptions about the GC implementation. Notes: Merged: https://github.com/ruby/ruby/pull/13497
2024-10-08Cast via `uintptr_t` function pointer between object pointerNobuyoshi Nakada
- ISO C forbids conversion of function pointer to object pointer type - ISO C forbids conversion of object pointer to function pointer type
2024-04-11put empty `rb_gc_force_recycle()`Koichi Sasada
and declare it will be removed soon. ddtrace is still referes the API and build was failed. See https://github.com/DataDog/dd-trace-rb/pull/3578 Maybe threre are only few users of this C-API now so we can remove it soon.
2024-04-05Remove deprecated function rb_gc_force_recyclePeter Zhu
This function has been deprecated since Ruby 3.1, so we should remove it for Ruby 3.4.
2023-11-30Add `RUBY_REFERENCES`Nobuyoshi Nakada
Instead of `RUBY_REFERENCES_START` and `RUBY_REFERENCES_END`, so that auto-indent works well.
2023-11-30Prefix `REF_EDGE` and `REFS_LIST_PTR` with `RUBY_`Nobuyoshi Nakada
Also move `struct` so that `typedef`-ed names can be used.
2023-11-26Constify `RUBY_REFERENCES_START` tablesNobuyoshi Nakada
2023-07-04Remove reference to USE_RINCGCMatt Valentine-House
This compile time flag was removed in https://github.com/ruby/ruby/pull/7313 This commit cleans up some related dead code. Notes: Merged: https://github.com/ruby/ruby/pull/7982
2023-04-07[Bug #19584] [DOC] Tweek description of `rb_gc_register_address`Nobuyoshi Nakada
2023-03-17[Feature #19406] Allow declarative definition of referencesMatt Valentine-House
When using rb_data_type_struct to wrap a C struct, that C struct can contain VALUE references to other Ruby objects. If this is the case then one must also define dmark and optionally dcompact callbacks in order to allow these objects to be correctly handled by the GC. This is suboptimal as it requires GC related logic to be implemented by extension developers. This can be a cause of subtle bugs when references are not marked of updated correctly inside these callbacks. This commit provides an alternative approach, useful in the simple case where the C struct contains VALUE members (ie. there isn't any conditional logic, or data structure manipulation required to traverse these references). In this case references can be defined using a declarative syntax as a list of edges (or, pointers to references). A flag can be set on the rb_data_type_struct to notify the GC that declarative references are being used, and a list of those references can be assigned to the dmark pointer instead of a function callback, on the rb_data_type_struct. Macros are also provided for simple declaration of the reference list, and building edges. To avoid having to also find space in the struct to define a length for the references list, I've chosed to always terminate the references list with RUBY_REF_END - defined as UINTPTR_MAX. My assumption is that no single struct will ever be large enough that UINTPTR_MAX is actually a valid reference. Notes: Merged: https://github.com/ruby/ruby/pull/7153
2023-02-28Merge internal/rgengc.h and internal/gc.hMatt Valentine-House
Notes: Merged: https://github.com/ruby/ruby/pull/7310
2023-02-27Merge internal/intern/gc.h into internal/gc.hMatt Valentine-House
Notes: Merged: https://github.com/ruby/ruby/pull/7330
2021-09-10sed -i 's/. They/. They/'卜部昌平
Truly editorial fix for comments. This works better with Emacs' set-justification-full function. [ci skip] Notes: Merged: https://github.com/ruby/ruby/pull/4815
2020-12-01Fix docs about movement for rb_gc_register_mark_object()Alan Wu
This API in fact pins objects passed to it. See vm.c:2546. Notes: Merged: https://github.com/ruby/ruby/pull/3815
2020-11-06Add docs for some C extension GC APIsAlan Wu
Notes: Merged: https://github.com/ruby/ruby/pull/3733
2020-05-11sed -i 's|ruby/impl|ruby/internal|'卜部昌平
To fix build failures. Notes: Merged: https://github.com/ruby/ruby/pull/3079
2020-05-11mv include/ruby/{impl,internal}卜部昌平
Devs do not love "impl". Notes: Merged: https://github.com/ruby/ruby/pull/3079