From 8dca9e230217cc6f4ded94e5fa0ab3f63df941b9 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sun, 18 Aug 2002 05:49:26 +0000 Subject: * perthread.h (vfork_save): Add ctty, sid, pgid, exitval fields. (vfork_save::restore_pid): New method. (vfork_save::restore_exit): New method. * fork.cc (vfork): Save ctty, sid, pgid and restore them when returning to "parent". Use exitval field if exiting but never created a new process. * syscalls.cc (setsid): Detect when in "vfork" and force an actual fork so that pid will be allocated (UGLY!). (getsid): New function. * dcrt0.cc (do_exit): Use vfork_save::restore_exit method for returning from a vfork. * spawn.cc (spawnve): Use vfork_save::{restore_pid,restore_exit} methods for returning from vfork. * cygwin.din: Export getsid. * include/cygwin/version.h: Bump api minor number. * malloc.cc: #ifdef sYSTRIm for when MORECORE_CANNOT_TRIM is true. --- winsup/cygwin/perthread.h | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'winsup/cygwin/perthread.h') diff --git a/winsup/cygwin/perthread.h b/winsup/cygwin/perthread.h index 48ad97621..f8682ae55 100644 --- a/winsup/cygwin/perthread.h +++ b/winsup/cygwin/perthread.h @@ -48,14 +48,30 @@ public: }; #if defined (NEED_VFORK) -struct vfork_save +class vfork_save { - int pid; jmp_buf j; + int exitval; + public: + int pid; DWORD frame[100]; char **vfork_ebp; char **vfork_esp; + int ctty; + pid_t sid; + pid_t pgid; int is_active () { return pid < 0; } + void restore_pid (int val) + { + pid = val; + longjmp (j, 1); + } + void restore_exit (int val) + { + exitval = val; + longjmp (j, 1); + } + friend int vfork (); }; class per_thread_vfork : public per_thread -- cgit v1.2.3