mirror of
https://github.com/ruby/ruby.git
synced 2026-10-28 16:36:20 +08:00
Use rb_len_t for finalizer counts and tables in the GCs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9511e08d9e
commit
4ef08fc130
5 files changed
+12
-12
Notes:
git
2026-10-10 07:46:21 +00:00
No files matched your search
@@ -293,14 +293,14 @@ rb_gc_get_objspace(void)
|
||||
}
|
||||
|
||||
void
|
||||
rb_gc_run_obj_finalizer(VALUE objid, long count, VALUE (*callback)(long i, void *data), void *data)
|
||||
rb_gc_run_obj_finalizer(VALUE objid, rb_len_t count, VALUE (*callback)(rb_len_t i, void *data), void *data)
|
||||
{
|
||||
volatile struct {
|
||||
VALUE errinfo;
|
||||
VALUE final;
|
||||
rb_control_frame_t *cfp;
|
||||
VALUE *sp;
|
||||
long finished;
|
||||
rb_len_t finished;
|
||||
} saved;
|
||||
|
||||
rb_execution_context_t * volatile ec = GET_EC();
|
||||
@@ -330,7 +330,7 @@ rb_gc_run_obj_finalizer(VALUE objid, long count, VALUE (*callback)(long i, void
|
||||
}
|
||||
}
|
||||
|
||||
for (long i = saved.finished; RESTORE_FINALIZER(), i < count; saved.finished = ++i) {
|
||||
for (rb_len_t i = saved.finished; RESTORE_FINALIZER(), i < count; saved.finished = ++i) {
|
||||
saved.final = callback(i, data);
|
||||
rb_check_funcall(saved.final, idCall, 1, &objid);
|
||||
}
|
||||
|
||||
@@ -4215,7 +4215,7 @@ rb_gc_impl_copy_finalizer(void *objspace_ptr, VALUE dest, VALUE obj)
|
||||
}
|
||||
|
||||
static VALUE
|
||||
get_final(long i, void *data)
|
||||
get_final(rb_len_t i, void *data)
|
||||
{
|
||||
VALUE table = (VALUE)data;
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ MODULAR_GC_FN void rb_gc_update_object_references(void *objspace, VALUE obj);
|
||||
MODULAR_GC_FN void rb_gc_update_vm_references(void *objspace);
|
||||
MODULAR_GC_FN void rb_gc_event_hook(VALUE obj, rb_event_flag_t event);
|
||||
MODULAR_GC_FN void *rb_gc_get_objspace(void);
|
||||
MODULAR_GC_FN void rb_gc_run_obj_finalizer(VALUE objid, long count, VALUE (*callback)(long i, void *data), void *data);
|
||||
MODULAR_GC_FN void rb_gc_run_obj_finalizer(VALUE objid, rb_len_t count, VALUE (*callback)(rb_len_t i, void *data), void *data);
|
||||
MODULAR_GC_FN void rb_gc_set_pending_interrupt(void);
|
||||
MODULAR_GC_FN void rb_gc_trigger_finalize_deferred(void *objspace, rb_postponed_job_handle_t pjob);
|
||||
MODULAR_GC_FN void rb_gc_trigger_postponed_job_on_main(rb_postponed_job_handle_t pjob);
|
||||
|
||||
+3
-3
@@ -1367,7 +1367,7 @@ rb_gc_impl_each_object(void *objspace_ptr, void (*func)(VALUE, void *), void *da
|
||||
|
||||
// Finalizers
|
||||
static VALUE
|
||||
gc_run_finalizers_get_final(long i, void *data)
|
||||
gc_run_finalizers_get_final(rb_len_t i, void *data)
|
||||
{
|
||||
VALUE table = (VALUE)data;
|
||||
|
||||
@@ -1449,8 +1449,8 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
|
||||
|
||||
/* avoid duplicate block, table is usually small */
|
||||
{
|
||||
long len = RARRAY_LEN(table);
|
||||
long i;
|
||||
rb_len_t len = RARRAY_LEN(table);
|
||||
rb_len_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
VALUE recv = RARRAY_AREF(table, i);
|
||||
|
||||
@@ -1556,8 +1556,8 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
|
||||
info->finalizers = table;
|
||||
} else {
|
||||
/* Check for duplicate finalizers (skip index 0 which is object ID) */
|
||||
long len = RARRAY_LEN(table);
|
||||
long i;
|
||||
rb_len_t len = RARRAY_LEN(table);
|
||||
rb_len_t i;
|
||||
|
||||
for (i = 1; i < len; i++) {
|
||||
VALUE recv = RARRAY_AREF(table, i);
|
||||
@@ -1615,7 +1615,7 @@ rb_gc_impl_copy_finalizer(void *objspace_ptr, VALUE dest, VALUE obj)
|
||||
}
|
||||
|
||||
static VALUE
|
||||
wbcheck_get_final(long i, void *data)
|
||||
wbcheck_get_final(rb_len_t i, void *data)
|
||||
{
|
||||
VALUE table = (VALUE)data;
|
||||
|
||||
@@ -1676,7 +1676,7 @@ wbcheck_run_finalizers_for_object(VALUE obj, rb_wbcheck_object_info_t *info)
|
||||
{
|
||||
if (info->finalizers) {
|
||||
VALUE table = info->finalizers;
|
||||
long count = RARRAY_LEN(table) - 1;
|
||||
rb_len_t count = RARRAY_LEN(table) - 1;
|
||||
rb_gc_run_obj_finalizer(RARRAY_AREF(table, 0), count, wbcheck_get_final, (void *)table);
|
||||
FL_UNSET(obj, FL_FINALIZE);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user