diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-06-18 10:20:46 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-06-18 10:20:46 +0900 |
commit | cab10a2c505f9fa7296f0a0d780d07827ea02b36 (patch) | |
tree | ddda9047b4a580cf672f6520a3276a38a87c6455 /gc.c | |
parent | 4b7c4bb92e6c760c721fa27351f7845b39a18e37 (diff) | |
download | ruby-cab10a2c505f9fa7296f0a0d780d07827ea02b36.tar.gz |
Extract `protect_page_body` to fix mismatched braces
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 28 |
1 files changed, 15 insertions, 13 deletions
@@ -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 { |