Browse Source

use direct syscall rather than write function in posix_spawn child

the write function is a cancellation point and accesses thread-local
state belonging to the calling thread in the parent process. since
cancellation is blocked for the duration of posix_spawn, this is
probably safe, but it's fragile and unnecessary. making the syscall
directly is just as easy and clearly safe.
Rich Felker 10 năm trước cách đây
mục cha
commit
8f7bc690f0
1 tập tin đã thay đổi với 1 bổ sung1 xóa
  1. 1 1
      src/process/posix_spawn.c

+ 1 - 1
src/process/posix_spawn.c

@@ -136,7 +136,7 @@ static int child(void *args_vp)
 fail:
 	/* Since sizeof errno < PIPE_BUF, the write is atomic. */
 	ret = -ret;
-	if (ret) while (write(p, &ret, sizeof ret) < 0);
+	if (ret) while (__syscall(SYS_write, p, &ret, sizeof ret) < 0);
 	_exit(127);
 }