Преглед на файлове

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);
 }