diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2015-12-03 12:38:19 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2015-12-03 12:38:19 +0100 |
commit | 89e86492b36cd15876ebb0ed725fbb4308828a9e (patch) | |
tree | 213e61fd097ef7204c642840dd71664bb4c3ba1f /winsup/cygwin/child_info.h | |
parent | 8974e06da3c0214613aa27dc08e1de2b02e27231 (diff) | |
download | cygnal-89e86492b36cd15876ebb0ed725fbb4308828a9e.tar.gz cygnal-89e86492b36cd15876ebb0ed725fbb4308828a9e.tar.bz2 cygnal-89e86492b36cd15876ebb0ed725fbb4308828a9e.zip |
Safely recognize when fork is running from main thread or another pthread
* child_info.h (struct child_info): Add member from_main.
* fork.cc (frok::child): Check from_main rather than stackaddr.
(frok::parent): Set ch.from_main if running in the main thread.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/child_info.h')
-rw-r--r-- | winsup/cygwin/child_info.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/winsup/cygwin/child_info.h b/winsup/cygwin/child_info.h index 1ec612788..ddd5b8bc8 100644 --- a/winsup/cygwin/child_info.h +++ b/winsup/cygwin/child_info.h @@ -39,7 +39,7 @@ enum child_status #define EXEC_MAGIC_SIZE sizeof(child_info) /* Change this value if you get a message indicating that it is out-of-sync. */ -#define CURR_CHILD_INFO_MAGIC 0xc96f5e9U +#define CURR_CHILD_INFO_MAGIC 0x30ea98f6U #define NPROCS 256 @@ -109,6 +109,7 @@ public: void *stackbase; // StackBase of parent thread size_t guardsize; // size of POSIX guard region or (size_t) -1 if // user stack + bool from_main; // true if started from parent's main thread char filler[4]; child_info_fork (); void __reg1 handle_fork (); |