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

ruby-changes:73764

From: Nobuyoshi <ko1@a...>
Date: Wed, 28 Sep 2022 23:52:11 +0900 (JST)
Subject: [ruby-changes:73764] a05b261464 (master): Always use the longer version of `TRY_WITH_GC`

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

From a05b2614645594df896aaf44a2e5701ee7fb5fec Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Wed, 28 Sep 2022 22:07:50 +0900
Subject: Always use the longer version of `TRY_WITH_GC`

---
 gc.c | 30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

diff --git a/gc.c b/gc.c
index d026139d7b..0ba28ba67b 100644
--- a/gc.c
+++ b/gc.c
@@ -12121,10 +12121,16 @@ objspace_malloc_fixup(rb_objspace_t *objspace, void *mem, size_t size) https://github.com/ruby/ruby/blob/trunk/gc.c#L12121
 }
 
 #if defined(__GNUC__) && RUBY_DEBUG
-#define RB_BUG_INSTEAD_OF_RB_MEMERROR
+#define RB_BUG_INSTEAD_OF_RB_MEMERROR 1
 #endif
 
-#ifdef RB_BUG_INSTEAD_OF_RB_MEMERROR
+#ifndef RB_BUG_INSTEAD_OF_RB_MEMERROR
+# define RB_BUG_INSTEAD_OF_RB_MEMERROR 0
+#endif
+
+#define GC_MEMERROR(...) \
+    ((RB_BUG_INSTEAD_OF_RB_MEMERROR+0) ? rb_bug("" __VA_ARGS__) : rb_memerror())
+
 #define TRY_WITH_GC(siz, expr) do {                          \
         const gc_profile_record_flag gpr =                   \
             GPR_FLAG_FULL_MARK           |                   \
@@ -12138,29 +12144,17 @@ objspace_malloc_fixup(rb_objspace_t *objspace, void *mem, size_t size) https://github.com/ruby/ruby/blob/trunk/gc.c#L12144
         }                                                    \
         else if (!garbage_collect_with_gvl(objspace, gpr)) { \
             /* @shyouhei thinks this doesn't happen */       \
-            rb_bug("TRY_WITH_GC: could not GC");             \
+            GC_MEMERROR("TRY_WITH_GC: could not GC");        \
         }                                                    \
         else if ((expr)) {                                   \
             /* Success on 2nd try */                         \
         }                                                    \
         else {                                               \
-            rb_bug("TRY_WITH_GC: could not allocate:"        \
-                   "%"PRIdSIZE" bytes for %s",               \
-                   siz, # expr);                             \
+            GC_MEMERROR("TRY_WITH_GC: could not allocate:"   \
+                        "%"PRIdSIZE" bytes for %s",          \
+                        siz, # expr);                        \
         }                                                    \
     } while (0)
-#else
-#define TRY_WITH_GC(siz, alloc) do { \
-        objspace_malloc_gc_stress(objspace); \
-        if (!(alloc) && \
-            (!garbage_collect_with_gvl(objspace, GPR_FLAG_FULL_MARK | \
-                GPR_FLAG_IMMEDIATE_MARK | GPR_FLAG_IMMEDIATE_SWEEP | \
-                GPR_FLAG_MALLOC) || \
-             !(alloc))) { \
-            ruby_memerror(); \
-        } \
-    } while (0)
-#endif
 
 /* these shouldn't be called directly.
  * objspace_* functions do not check allocation size.
-- 
cgit v1.2.1


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

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