summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--process.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/process.c b/process.c
index 9f2a7b9337..e6788a0ccc 100644
--- a/process.c
+++ b/process.c
@@ -514,8 +514,8 @@ clear_pid_cache(void)
static inline void
rb_process_atfork(void)
{
- clear_pid_cache();
- rb_thread_atfork(); /* calls mjit_resume() */
+ clear_pid_cache();
+ rb_thread_atfork(); /* calls mjit_resume() */
}
/*
@@ -9055,5 +9055,10 @@ Init_process(void)
#endif
define_id(hertz);
+ /* pid_t must be signed, since fork() can return -1 */
+ const rb_pid_t half_max_pidt = (rb_pid_t)1 << (sizeof(rb_pid_t) * CHAR_BIT - 2);
+ const rb_pid_t max_pidt = 2 * (half_max_pidt - 1) + 1;
+ if (!POSFIXABLE(max_pidt)) rb_gc_register_address(&cached_pid);
+
InitVM(process);
}