[前][次][番号順一覧][スレッド一覧]

ruby-changes:69650

From: Peter <ko1@a...>
Date: Tue, 9 Nov 2021 04:06:12 +0900 (JST)
Subject: [ruby-changes:69650] 309406484b (master): [Feature #18290] Deprecate rb_gc_force_recycle and remove invalidate_mark_stack_chunk

https://git.ruby-lang.org/ruby.git/commit/?id=309406484b

From 309406484b98fe0aea55016d8f5971b4e6b91761 Mon Sep 17 00:00:00 2001
From: Peter Zhu <peter@p...>
Date: Fri, 5 Nov 2021 09:52:07 -0400
Subject: [Feature #18290] Deprecate rb_gc_force_recycle and remove
 invalidate_mark_stack_chunk

This commit deprecates rb_gc_force_recycle and coverts it to a no-op
function. Also removes invalidate_mark_stack_chunk since only
rb_gc_force_recycle uses it.
---
 gc.c                              | 73 +--------------------------------------
 include/ruby/internal/intern/gc.h |  2 ++
 2 files changed, 3 insertions(+), 72 deletions(-)

diff --git a/gc.c b/gc.c
index 3fa1abb59a7..3251719066d 100644
--- a/gc.c
+++ b/gc.c
@@ -6142,35 +6142,6 @@ pop_mark_stack(mark_stack_t *stack, VALUE *data) https://github.com/ruby/ruby/blob/trunk/gc.c#L6142
     return TRUE;
 }
 
-#if GC_ENABLE_INCREMENTAL_MARK
-static int
-invalidate_mark_stack_chunk(stack_chunk_t *chunk, int limit, VALUE obj)
-{
-    int i;
-    for (i=0; i<limit; i++) {
-	if (chunk->data[i] == obj) {
-	    chunk->data[i] = Qundef;
-	    return TRUE;
-	}
-    }
-    return FALSE;
-}
-
-static void
-invalidate_mark_stack(mark_stack_t *stack, VALUE obj)
-{
-    stack_chunk_t *chunk = stack->chunk;
-    int limit = stack->index;
-
-    while (chunk) {
-	if (invalidate_mark_stack_chunk(chunk, limit, obj)) return;
-	chunk = chunk->next;
-	limit = stack->limit;
-    }
-    rb_bug("invalid_mark_stack: unreachable");
-}
-#endif
-
 static void
 init_mark_stack(mark_stack_t *stack)
 {
@@ -8743,49 +8714,7 @@ rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache) https://github.com/ruby/ruby/blob/trunk/gc.c#L8714
 void
 rb_gc_force_recycle(VALUE obj)
 {
-    rb_objspace_t *objspace = &rb_objspace;
-    RB_VM_LOCK_ENTER();
-    {
-        int is_old = RVALUE_OLD_P(obj);
-
-        gc_report(2, objspace, "rb_gc_force_recycle: %s\n", obj_info(obj));
-
-        if (is_old) {
-            if (RVALUE_MARKED(obj)) {
-                objspace->rgengc.old_objects--;
-            }
-        }
-        CLEAR_IN_BITMAP(GET_HEAP_UNCOLLECTIBLE_BITS(obj), obj);
-        CLEAR_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(obj), obj);
-        CLEAR_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), obj);
-
-        if (is_incremental_marking(objspace)) {
-#if GC_ENABLE_INCREMENTAL_MARK
-            if (MARKED_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), obj)) {
-                invalidate_mark_stack(&objspace->mark_stack, obj);
-                CLEAR_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), obj);
-            }
-            CLEAR_IN_BITMAP(GET_HEAP_MARK_BITS(obj), obj);
-#endif
-        }
-        else {
-            if (is_old || GET_HEAP_PAGE(obj)->flags.before_sweep) {
-                CLEAR_IN_BITMAP(GET_HEAP_MARK_BITS(obj), obj);
-            }
-            CLEAR_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), obj);
-        }
-
-        objspace->profile.total_freed_objects++;
-
-        heap_page_add_freeobj(objspace, GET_HEAP_PAGE(obj), obj);
-
-        /* Disable counting swept_slots because there are no meaning.
-         * if (!MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(p), p)) {
-         *   objspace->heap.swept_slots++;
-         * }
-         */
-    }
-    RB_VM_LOCK_LEAVE();
+    /* no-op */
 }
 
 #ifndef MARK_OBJECT_ARY_BUCKET_SIZE
diff --git a/include/ruby/internal/intern/gc.h b/include/ruby/internal/intern/gc.h
index d8e476b0782..e7b8008729b 100644
--- a/include/ruby/internal/intern/gc.h
+++ b/include/ruby/internal/intern/gc.h
@@ -208,7 +208,9 @@ VALUE rb_gc_location(VALUE obj); https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/gc.h#L208
  * @post        `obj` could be invalidated.
  * @warning     It  is a  failure  to pass  an object  multiple  times to  this
  *              function.
+ * @deprecated  This is now a no-op function.
  */
+RBIMPL_ATTR_DEPRECATED(("this is now a no-op function"))
 void rb_gc_force_recycle(VALUE obj);
 
 /**
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]