aboutsummaryrefslogtreecommitdiffstats
path: root/process.c
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2020-05-02 21:34:10 +0900
committerYusuke Endoh <mame@ruby-lang.org>2020-05-02 21:34:10 +0900
commit91e4e2403e950d06eb49840bdb11409321002847 (patch)
tree16ab8af0fc4c398dd7f9a27d056cd181d796c8a7 /process.c
parentbb2ca762375d89a9c48abb14c4f79d68f2b49a5a (diff)
downloadruby-91e4e2403e950d06eb49840bdb11409321002847.tar.gz
internal/process.h: add a no-warning simple wrapper for fork(2)
As fork(2) is deprecated, its calls must be guarded by `COMPILER_WARNING_IGNORED(-Wdeprecated-declarations)`. All usages of fork(2) in process have been alread guarded. A new call to fork(2) was added in ruby.c with f22c4ff359498ab342e4b6d6feb21af6004ee270. This caused a build failure on Solaris 11. It may hide a bug to guard big code unnecessarily, so this change introduces a simple wrapper "rb_fork" whose definition is guarded, and replaces all calls to fork(2) with the wrapper function.
Diffstat (limited to 'process.c')
-rw-r--r--process.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/process.c b/process.c
index 0d0b466686..e5cfed8cf2 100644
--- a/process.c
+++ b/process.c
@@ -3957,10 +3957,6 @@ disable_child_handler_fork_child(struct child_handler_disabler_state *old, char
return 0;
}
-COMPILER_WARNING_PUSH
-#if __has_warning("-Wdeprecated-declarations") || RUBY3_COMPILER_IS(GCC)
-COMPILER_WARNING_IGNORED(-Wdeprecated-declarations)
-#endif
static rb_pid_t
retry_fork_async_signal_safe(int *status, int *ep,
int (*chfunc)(void*, char *, size_t), void *charg,
@@ -3985,9 +3981,9 @@ retry_fork_async_signal_safe(int *status, int *ep,
if (!has_privilege())
pid = vfork();
else
- pid = fork();
+ pid = rb_fork();
#else
- pid = fork();
+ pid = rb_fork();
#endif
if (pid == 0) {/* fork succeed, child process */
int ret;
@@ -4021,7 +4017,6 @@ retry_fork_async_signal_safe(int *status, int *ep,
return -1;
}
}
-COMPILER_WARNING_POP
static rb_pid_t
fork_check_err(int *status, int (*chfunc)(void*, char *, size_t), void *charg,
@@ -4075,10 +4070,6 @@ rb_fork_async_signal_safe(int *status,
return fork_check_err(status, chfunc, charg, fds, errmsg, errmsg_buflen, 0);
}
-COMPILER_WARNING_PUSH
-#if __has_warning("-Wdeprecated-declarations") || RUBY3_COMPILER_IS(GCC)
-COMPILER_WARNING_IGNORED(-Wdeprecated-declarations)
-#endif
rb_pid_t
rb_fork_ruby(int *status)
{
@@ -4093,7 +4084,7 @@ rb_fork_ruby(int *status)
if (mjit_enabled) mjit_pause(false); // Don't leave locked mutex to child. Note: child_handler must be enabled to pause MJIT.
disable_child_handler_before_fork(&old);
before_fork_ruby();
- pid = fork();
+ pid = rb_fork();
err = errno;
after_fork_ruby();
disable_child_handler_fork_parent(&old); /* yes, bad name */
@@ -4105,7 +4096,6 @@ rb_fork_ruby(int *status)
return -1;
}
}
-COMPILER_WARNING_POP
#endif