فهرست منبع

prevent fork's errno from being clobbered by atfork handlers

If the syscall fails, errno must be set correctly for the caller.
There's no guarantee that the handlers registered with pthread_atfork
won't clobber errno, so we need to ensure it gets set after they are
called.
Bobby Bingham 7 سال پیش
والد
کامیت
c21051e90c
1فایلهای تغییر یافته به همراه3 افزوده شده و 3 حذف شده
  1. 3 3
      src/process/fork.c

+ 3 - 3
src/process/fork.c

@@ -18,9 +18,9 @@ pid_t fork(void)
 	__fork_handler(-1);
 	__block_all_sigs(&set);
 #ifdef SYS_fork
-	ret = syscall(SYS_fork);
+	ret = __syscall(SYS_fork);
 #else
-	ret = syscall(SYS_clone, SIGCHLD, 0);
+	ret = __syscall(SYS_clone, SIGCHLD, 0);
 #endif
 	if (!ret) {
 		pthread_t self = __pthread_self();
@@ -31,5 +31,5 @@ pid_t fork(void)
 	}
 	__restore_sigs(&set);
 	__fork_handler(!ret);
-	return ret;
+	return __syscall_ret(ret);
 }