summaryrefslogtreecommitdiff
path: root/process.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-03-20 18:08:05 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-03-20 18:08:05 +0900
commit758e4db551e7e80a65b610cc73fcb61e74ec5a0c (patch)
treef9095b39d880ba96be1ec68a7e3095858dacae80 /process.c
parent1aa255504414d74977130f9086ee35e149cd22e2 (diff)
downloadruby-758e4db551e7e80a65b610cc73fcb61e74ec5a0c.tar.gz
Mark cached pid if necessary
Diffstat (limited to 'process.c')
-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);
}