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

ruby-changes:72224

From: Nobuyoshi <ko1@a...>
Date: Sat, 18 Jun 2022 13:06:02 +0900 (JST)
Subject: [ruby-changes:72224] cab10a2c50 (master): Extract `protect_page_body` to fix mismatched braces

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

From cab10a2c505f9fa7296f0a0d780d07827ea02b36 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Sat, 18 Jun 2022 10:20:46 +0900
Subject: Extract `protect_page_body` to fix mismatched braces

---
 gc.c | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/gc.c b/gc.c
index 0d6ad838fd..e5a61e296e 100644
--- a/gc.c
+++ b/gc.c
@@ -5100,16 +5100,24 @@ gc_setup_mark_bits(struct heap_page *page) https://github.com/ruby/ruby/blob/trunk/gc.c#L5100
 static int gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj);
 static VALUE gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t src_slot_size, size_t slot_size);
 
-static void
-lock_page_body(rb_objspace_t *objspace, struct heap_page_body *body)
-{
 #if defined(_WIN32)
-    DWORD old_protect;
+enum {HEAP_PAGE_LOCK = PAGE_NOACCESS, HEAP_PAGE_UNLOCK = PAGE_READWRITE};
 
-    if (!VirtualProtect(body, HEAP_PAGE_SIZE, PAGE_NOACCESS, &old_protect)) {
+static BOOL
+protect_page_body(struct heap_page_body *body, DWORD protect)
+{
+    DWORD old_protect;
+    return VirtualProtect(body, HEAP_PAGE_SIZE, protect, &old_protect) != 0;
+}
 #else
-    if (mprotect(body, HEAP_PAGE_SIZE, PROT_NONE)) {
+enum {HEAP_PAGE_LOCK = PROT_NONE, HEAP_PAGE_UNLOCK = PROT_READ | PROT_WRITE};
+#define protect_page_body(body, protect) !mprotect((body), HEAP_PAGE_SIZE, (protect))
 #endif
+
+static void
+lock_page_body(rb_objspace_t *objspace, struct heap_page_body *body)
+{
+    if (!protect_page_body(body, HEAP_PAGE_LOCK)) {
         rb_bug("Couldn't protect page %p, errno: %s", (void *)body, strerror(errno));
     }
     else {
@@ -5120,13 +5128,7 @@ lock_page_body(rb_objspace_t *objspace, struct heap_page_body *body) https://github.com/ruby/ruby/blob/trunk/gc.c#L5128
 static void
 unlock_page_body(rb_objspace_t *objspace, struct heap_page_body *body)
 {
-#if defined(_WIN32)
-    DWORD old_protect;
-
-    if (!VirtualProtect(body, HEAP_PAGE_SIZE, PAGE_READWRITE, &old_protect)) {
-#else
-    if (mprotect(body, HEAP_PAGE_SIZE, PROT_READ | PROT_WRITE)) {
-#endif
+    if (!protect_page_body(body, HEAP_PAGE_UNLOCK)) {
         rb_bug("Couldn't unprotect page %p, errno: %s", (void *)body, strerror(errno));
     }
     else {
-- 
cgit v1.2.1


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

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