summaryrefslogtreecommitdiff
path: root/internal.h
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-10-29 23:52:39 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-10-29 23:52:39 +0000
commit8227c91dfe278d82d4858912083ed51da5a8fde5 (patch)
tree0a7276e93839e1c3ee7d45fa551a28609adbabe9 /internal.h
parent1ac67ec41678f021482be09033ca6e179e29be91 (diff)
process.c: implement rb_f_system without toggling ruby_nocldwait
Following how mjit_worker.c currently works, rb_f_system now ensures the VM-wide waitpid lists is locked before creating a new process via fork/vfork. This ensures other rb_waitpid callers cannot steal work and there are no possible race conditions from toggling ruby_nocldwait without the use of atomics. This sets us up for implementing MJIT process management logic using normal Ruby APIs prepares us for VM-wide asynchronous/event-base waitpid which can allow MJIT to work without worker threads. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65434 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'internal.h')
-rw-r--r--internal.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/internal.h b/internal.h
index 3f6f5e4608..697a1196fa 100644
--- a/internal.h
+++ b/internal.h
@@ -1671,6 +1671,7 @@ VALUE rb_block_to_s(VALUE self, const struct rb_block *block, const char *additi
/* process.c */
#define RB_MAX_GROUPS (65536)
+struct waitpid_state;
struct rb_execarg {
union {
struct {
@@ -1700,7 +1701,7 @@ struct rb_execarg {
unsigned uid_given : 1;
unsigned gid_given : 1;
unsigned exception : 1;
- unsigned nocldwait_prev : 1;
+ struct waitpid_state *waitpid_state; /* for async process management */
rb_pid_t pgroup_pgid; /* asis(-1), new pgroup(0), specified pgroup (0<V). */
VALUE rlimit_limits; /* Qfalse or [[rtype, softlim, hardlim], ...] */
mode_t umask_mask;