소스 검색

use vfork if possible in posix_spawn

vfork is implemented as the fork syscall (with no atfork handlers run)
on archs where it is not available, so this change does not introduce
any change in behavior or regression for such archs.
Rich Felker 12 년 전
부모
커밋
d62f4e9888
1개의 변경된 파일3개의 추가작업 그리고 1개의 파일을 삭제
  1. 3 1
      src/process/posix_spawn.c

+ 3 - 1
src/process/posix_spawn.c

@@ -8,6 +8,8 @@
 
 extern char **environ;
 
+pid_t __vfork(void);
+
 int __posix_spawnx(pid_t *restrict res, const char *restrict path,
 	int (*exec)(const char *, char *const *),
 	const posix_spawn_file_actions_t *fa,
@@ -22,7 +24,7 @@ int __posix_spawnx(pid_t *restrict res, const char *restrict path,
 	if (!attr) attr = &dummy_attr;
 
 	sigprocmask(SIG_BLOCK, (void *)(uint64_t []){-1}, &oldmask);
-	pid = __syscall(SYS_fork);
+	pid = __vfork();
 
 	if (pid) {
 		sigprocmask(SIG_SETMASK, &oldmask, 0);