PTY read differences on Illumos
Đang mở
Chưa có ai nhận issue này.
Bug
Extension: standard
OS: Illumos
SAPI: cli
- Ngôn ngữ chính
- C
- Star
- 40.4k
- Fork
- 8.2k
- Merge trung bình
- 2 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 96
Mô tả
Description
When testing some other things on Illumos, I noticed that t/standard/tests/file/bug69442.phpt test hangs due to some pty incompatibility:
Truss output
# truss /usr/local/bin/php ext/standard/tests/file/bug69442.phpt execvex("/usr/local/bin/php", 0xFFFFFC7FFFDFCC68, 0xFFFFFC7FFFDFCC80, 0) argc = 2 sysinfo(SI_MACHINE, "i86pc", 257) = 6 mmap(0x00000000, 56, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FE2ED0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FED070000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FED0F0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEEB70000 memcntl(0xFFFFFC7FEF399000, 88824, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEECD0000 memcntl(0x00400000, 1632728, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 resolvepath("/usr/lib/amd64/ld.so.1", "/lib/amd64/ld.so.1", 1023) = 18 resolvepath("/usr/local/bin/php", "/usr/local/bin/php", 1023) = 18 stat("/usr/local/bin/php", 0xFFFFFC7FFFDFC8B0) = 0 open("/var/ld/64/ld.config", O_RDONLY) Err#2 ENOENT stat("/usr/ucblib/libresolv.so.2", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/usr/gcc/14/lib/amd64/libresolv.so.2", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/lib/64/libresolv.so.2", 0xFFFFFC7FFFDFBC80) = 0 resolvepath("/lib/64/libresolv.so.2", "/lib/amd64/libresolv.so.2", 1023) = 25 open("/lib/64/libresolv.so.2", O_RDONLY) = 3 mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEECD0CC0, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0 close(3) = 0 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF2C0000 memcntl(0xFFFFFC7FEF200000, 118392, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 stat("/usr/ucblib/libproc.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/usr/gcc/14/lib/amd64/libproc.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/lib/64/libproc.so.1", 0xFFFFFC7FFFDFBC80) = 0 resolvepath("/lib/64/libproc.so.1", "/lib/amd64/libproc.so.1", 1023) = 23 open("/lib/64/libproc.so.1", O_RDONLY) = 3 mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF2C0C40, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0 close(3) = 0 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF360000 memcntl(0xFFFFFC7FEF2F0000, 89320, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 stat("/usr/ucblib/libm.so.2", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/usr/gcc/14/lib/amd64/libm.so.2", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/lib/64/libm.so.2", 0xFFFFFC7FFFDFBC80) = 0 resolvepath("/lib/64/libm.so.2", "/lib/amd64/libm.so.2", 1023) = 20 open("/lib/64/libm.so.2", O_RDONLY) = 3 mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF360B58, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0 close(3) = 0 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF370000 memcntl(0xFFFFFC7FEEEC0000, 81056, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 stat("/usr/ucblib/libnsl.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/usr/gcc/14/lib/amd64/libnsl.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/lib/64/libnsl.so.1", 0xFFFFFC7FFFDFBC80) = 0 resolvepath("/lib/64/libnsl.so.1", "/lib/amd64/libnsl.so.1", 1023) = 22 open("/lib/64/libnsl.so.1", O_RDONLY) = 3 mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF370AB0, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0 close(3) = 0 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF2E0000 memcntl(0xFFFFFC7FEF0A0000, 186416, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 stat("/usr/ucblib/libsocket.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/usr/gcc/14/lib/amd64/libsocket.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/lib/64/libsocket.so.1", 0xFFFFFC7FFFDFBC80) = 0 resolvepath("/lib/64/libsocket.so.1", "/lib/amd64/libsocket.so.1", 1023) = 25 open("/lib/64/libsocket.so.1", O_RDONLY) = 3 mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF2E0B28, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0 close(3) = 0 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF1A0000 memcntl(0xFFFFFC7FEF280000, 34808, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 stat("/usr/ucblib/libgcc_s.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/usr/gcc/14/lib/amd64/libgcc_s.so.1", 0xFFFFFC7FFFDFBC80) = 0 resolvepath("/usr/gcc/14/lib/amd64/libgcc_s.so.1", "/usr/gcc/14/lib/amd64/libgcc_s.so.1", 1023) = 35 open("/usr/gcc/14/lib/amd64/libgcc_s.so.1", O_RDONLY) = 3 mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF1A0AB0, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0 close(3) = 0 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF1D0000 memcntl(0xFFFFFC7FEF040000, 40752, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 stat("/usr/ucblib/libc.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/usr/gcc/14/lib/amd64/libc.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/lib/64/libc.so.1", 0xFFFFFC7FFFDFBC80) = 0 resolvepath("/lib/64/libc.so.1", "/lib/amd64/libc.so.1", 1023) = 20 open("/lib/64/libc.so.1", O_RDONLY) = 3 mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF1D0A60, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0 close(3) = 0 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF1F0000 memcntl(0xFFFFFC7FEECF0000, 445576, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 stat("/usr/gcc/10/lib/amd64/libc.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/usr/gcc/10/lib/amd64/libsaveargs.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/lib/64/libsaveargs.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/usr/lib/64/libsaveargs.so.1", 0xFFFFFC7FFFDFBC80) = 0 resolvepath("/usr/lib/64/libsaveargs.so.1", "/usr/lib/amd64/libsaveargs.so.1", 1023) = 31 open("/usr/lib/64/libsaveargs.so.1", O_RDONLY) = 3 mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF1D0E50, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0 close(3) = 0 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF180000 memcntl(0xFFFFFC7FEF160000, 4456, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 stat("/usr/gcc/10/lib/amd64/libdisasm.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/lib/64/libdisasm.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT stat("/usr/lib/64/libdisasm.so.1", 0xFFFFFC7FFFDFBC80) = 0 resolvepath("/usr/lib/64/libdisasm.so.1", "/usr/lib/amd64/libdisasm.so.1", 1023) = 29 open("/usr/lib/64/libdisasm.so.1", O_RDONLY) = 3 mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF180D18, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0 close(3) = 0 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF1C0000 memcntl(0xFFFFFC7FEEF90000, 106784, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 stat("/usr/gcc/10/lib/amd64/libnsl.so.1", 0xFFFFFC7FFFDFB690) Err#2 ENOENT stat("/usr/gcc/10/lib/amd64/libsocket.so.1", 0xFFFFFC7FFFDFB7C0) Err#2 ENOENT mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF090000 mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xFFFFFC7FEEF70000 getcontext(0xFFFFFC7FFFDFC3D0) getrlimit(RLIMIT_STACK, 0xFFFFFC7FFFDFC3C0) = 0 getpid() = 11858 [11857] lwp_private(0, 0, 0xFFFFFC7FEEF72A40) = 0x00000000 getrandom("91F0\0ABB9 Warning: Undefined array key "TEST_PHP_EXECUTABLE" in /home/jakub/prog/php/master/ext/standard/tests/file/bug69442.phpt on line 16
write(1, "\n W a r n i n g : U n".., 132) = 132
access("/usr/bin/sh", X_OK) = 0
open("/dev/null", O_RDWR) = 4
fcntl(4, F_GETFD, 0xFFFFFE0BDD07CBE0) = 0
pipe([5,6], 0) = 0
access("/usr/bin/sh", X_OK) = 0
lwp_sigmask(SIG_SETMASK, 0xFFBFFEFF, 0xFFFFFFFF, 0x000003FF, 0x00000000) = 0x00000000 [0x00000000]
vforkx(FORK_NOSIGCHLD|FORK_WAITPID) = 11859
lwp_sigmask(SIG_SETMASK, 0x00000000, 0x00000000, 0x00000000, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
close(6) = 0
fcntl(5, F_DUP2FD, 0x00000004) = 4
close(5) = 0
read(4, " s h : - d : n o t ".., 8192) = 46
read(4, 0xFFFFFC7FEE694000, 8192) = 0
lseek(4, 0, SEEK_CUR) Err#29 ESPIPE
close(4) = 0
waitid(P_PID, 11859, 0xFFFFFC7FFFDFA8F0, WEXITED|WTRAPPED) = 0
unlink("/var/tmp/bug69442a6htqkqpvjl8bLkaqkx") = 0
--FILE--
write(1, " - - F I L E - -\n", 9) = 9
open("/dev/ptmx", O_RDWR|O_NOCTTY) = 4
ioctl(4, I_STR, 0xFFFFFC7FFFDFA8E0) = 0
fstat(4, 0xFFFFFC7FFFDFA900) = 0
getuid() = 0 [0]
getuid() = 0 [0]
getpid() = 11858 [11857]
open("/proc/11858/psinfo", O_RDONLY) = 5
read(5, "\0\0\00201\0\0\0 R .\0\0".., 416) = 416
close(5) = 0
mmap(0x00010000, 65536, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON|MAP_ALIGN, 4294967295, 0) = 0xFFFFFC7FEECB0000
getuid() = 0 [0]
getuid() = 0 [0]
open("/var/run/name_service_door", O_RDONLY) = 5
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
door_info(5, 0xFFFFFC7FEEE7DC00) = 0
door_call(5, 0xFFFFFC7FFFDFA5E0) = 0
ioctl(4, I_STR, 0xFFFFFC7FFFDFA9C0) = 0
ioctl(4, I_STR, 0xFFFFFC7FFFDFA9D0) = 0
ioctl(4, I_STR, 0xFFFFFC7FFFDFA8D0) = 0
fstat(4, 0xFFFFFC7FFFDFA8F0) = 0
access("/dev/pts/3", F_OK) = 0
open("/dev/pts/3", O_RDONLY|O_NOCTTY) = 6
ioctl(6, I_PUSH, "ptem") = 0
fcntl(6, F_DUPFD, 0x00000000) = 7
fcntl(4, F_DUPFD, 0x00000000) = 8
fcntl(6, F_DUPFD, 0x00000000) = 9
fcntl(4, F_DUPFD, 0x00000000) = 10
fcntl(6, F_DUPFD, 0x00000000) = 11
fcntl(4, F_DUPFD, 0x00000000) = 12
pipe([13,14], 0) = 0
fcntl(13, F_SETFD, FD_CLOEXEC) = 0
lwp_sigmask(SIG_SETMASK, 0xFFBFFEFF, 0xFFFFFFFF, 0x000003FF, 0x00000000) = 0x00000000 [0x00000000]
vforkx(0) = 11860
lwp_sigmask(SIG_SETMASK, 0x00000000, 0x00000000, 0x00000000, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
close(7) = 0
fstat(8, 0xFFFFFC7FEE68A3B8) = 0
close(9) = 0
fstat(10, 0xFFFFFC7FEE68A498) = 0
close(11) = 0
fstat(12, 0xFFFFFC7FEE68A578) = 0
close(14) = 0
fstat(13, 0xFFFFFC7FEE68A658) = 0
close(4) = 0
close(6) = 0
read(8, 0xFFFFFC7FEE699000, 8192) = 0
Received signal #18, SIGCLD, in read() [default]
siginfo: SIGCLD CLD_EXITED pid=11860 status=0x002A
read(8, 0xFFFFFC7FEE699000, 8192) (sleeping...)
^[[B^[[B^[[Aq^C Received signal #2, SIGINT, in read() [caught]
PHP Version
PHP 8.3
Operating System
OmniOS r151054
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Tái hiện tình trạng treo trong t/standard/tests/file/bug69442.phpt trên Illumos và sử dụng đầu ra truss đi kèm làm bằng chứng ban đầu. Theo dõi hành vi đọc PTY mà bài kiểm thử này đi tới, sau đó xác minh rằng bài kiểm thử hoàn tất mà không bị treo trên Illumos.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- c
- Lĩnh vực
- operating-systems
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 35/100