aboutsummaryrefslogtreecommitdiffstats
path: root/gc.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-06-18 10:20:46 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-06-18 10:20:46 +0900
commitcab10a2c505f9fa7296f0a0d780d07827ea02b36 (patch)
treeddda9047b4a580cf672f6520a3276a38a87c6455 /gc.c
parent4b7c4bb92e6c760c721fa27351f7845b39a18e37 (diff)
downloadruby-cab10a2c505f9fa7296f0a0d780d07827ea02b36.tar.gz
Extract `protect_page_body` to fix mismatched braces
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c28
1 files 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)
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)
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 {