diff options
Diffstat (limited to 'winsup/cygwin/spawn.cc')
-rw-r--r-- | winsup/cygwin/spawn.cc | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 602c0af69..8c1c18adb 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -907,11 +907,13 @@ spawnve (int mode, const char *path, const char *const *argv, case _P_DETACH: subproc_init (); ret = spawn_guts (path, argv, envp, mode); - if (vf && ret > 0) + if (vf) { debug_printf ("longjmping due to vfork"); - vf->pid = ret; - longjmp (vf->j, 1); + if (ret < 0) + vf->restore_exit (ret); + else + vf->restore_pid (ret); } break; default: |