Explorar el Código

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 hace 7 años
padre
commit
c21051e90c
Se han modificado 1 ficheros con 3 adiciones y 3 borrados
  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);
 }