Hi,

I noticed some unreliability in tipidee-config. It sometimes fails with
this error:
        tipidee-config: fatal: unable to read from preprocessor: No child 
process

On Alpine edge this seems to be able to reproduce the issue relatively
quickly:
        echo > tipidee.conf
        while tipidee-config -i tipidee.conf -o tipidee.conf.cdb; do :; done

When running tipidee-config in strace it only happens very rarely so
I attached the strace I got.

A quick look makes it seem that the code tries to wait for a child after
it had already exited.
execve("/usr/bin/tipidee-config", ["tipidee-config", "-i", "tipidee.conf", "-o", "tipidee.conf.cdb"], 0x7ffce4bb4e80 /* 59 vars */) = 0
arch_prctl(ARCH_SET_FS, 0x7f8af7124b28) = 0
set_tid_address(0x7f8af7124f90)         = 28425
brk(NULL)                               = 0x5576d85d8000
brk(0x5576d85da000)                     = 0x5576d85da000
mmap(0x5576d85d8000, 4096, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x5576d85d8000
open("/etc/ld-musl-x86_64.path", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libskarnet.so.2.14", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libskarnet.so.2.14", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libskarnet.so.2.14", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=199984, ...}) = 0
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
mmap(NULL, 241664, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f8af703c000
mmap(0x7f8af704d000, 102400, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0x11000) = 0x7f8af704d000
mmap(0x7f8af7066000, 16384, PROT_READ, MAP_PRIVATE|MAP_FIXED, 3, 0x2a000) = 0x7f8af7066000
mmap(0x7f8af706a000, 53248, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x2d000) = 0x7f8af706a000
mmap(0x7f8af706e000, 36864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f8af706e000
close(3)                                = 0
mprotect(0x7f8af706a000, 12288, PROT_READ) = 0
mprotect(0x7f8af7121000, 4096, PROT_READ) = 0
mprotect(0x5576a075d000, 4096, PROT_READ) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RT_1 RT_2], NULL, 8) = 0
rt_sigaction(SIGCHLD, {sa_handler=0x5576a075476e, sa_mask=~[RTMIN RT_1 RT_2], sa_flags=SA_RESTORER|SA_RESTART|SA_NOCLDSTOP, sa_restorer=0x7f8af70ddf42}, NULL, 8) = 0
pipe([3, 4])                            = 0
rt_sigprocmask(SIG_BLOCK, ~[], [CHLD], 8) = 0
pipe2([5, 6], O_CLOEXEC)                = 0
clone(child_stack=0x7fff33ee8b38, flags=CLONE_VM|CLONE_VFORK|SIGCHLDstrace: Process 28426 attached
 <unfinished ...>
[pid 28426] close(5)                    = 0
[pid 28426] rt_sigaction(SIGCHLD, NULL, {sa_handler=0x5576a075476e, sa_mask=~[KILL STOP RTMIN RT_1 RT_2], sa_flags=SA_RESTORER|SA_RESTART|SA_NOCLDSTOP, sa_restorer=0x7f8af70ddf42}, 8) = 0
[pid 28426] rt_sigaction(SIGCHLD, {sa_handler=SIG_DFL, sa_mask=~[KILL STOP RTMIN RT_1 RT_2], sa_flags=SA_RESTORER|SA_RESTART|SA_NOCLDSTOP, sa_restorer=0x7f8af70ddf42}, NULL, 8) = 0
[pid 28426] close(3)                    = 0
[pid 28426] dup2(4, 1)                  = 1
[pid 28426] close(4)                    = 0
[pid 28426] fcntl(6, F_SETFD, FD_CLOEXEC) = 0
[pid 28426] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid 28426] execve("/usr/lib/tipidee/tipidee-config-preprocess", ["/usr/lib/tipidee/tipidee-config-"..., "tipidee.conf"], 0x7fff33eec188 /* 59 vars */ <unfinished ...>
[pid 28425] <... clone resumed>)        = 28426
[pid 28425] close(6)                    = 0
[pid 28425] read(5, "", 4)              = 0
[pid 28426] <... execve resumed>)       = 0
[pid 28425] close(5)                    = 0
[pid 28425] rt_sigprocmask(SIG_SETMASK, [CHLD] <unfinished ...>
[pid 28426] arch_prctl(ARCH_SET_FS, 0x7fa43dff3b28 <unfinished ...>
[pid 28425] <... rt_sigprocmask resumed>, NULL, 8) = 0
[pid 28426] <... arch_prctl resumed>)   = 0
[pid 28425] close(4 <unfinished ...>
[pid 28426] set_tid_address(0x7fa43dff3f90 <unfinished ...>
[pid 28425] <... close resumed>)        = 0
[pid 28426] <... set_tid_address resumed>) = 28426
[pid 28425] rt_sigprocmask(SIG_UNBLOCK, [CHLD] <unfinished ...>
[pid 28426] brk(NULL <unfinished ...>
[pid 28425] <... rt_sigprocmask resumed>, NULL, 8) = 0
[pid 28426] <... brk resumed>)          = 0x561ba7608000
[pid 28425] readv(3 <unfinished ...>
[pid 28426] brk(0x561ba760a000)         = 0x561ba760a000
[pid 28426] mmap(0x561ba7608000, 4096, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x561ba7608000
[pid 28426] open("/etc/ld-musl-x86_64.path", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
[pid 28426] open("/lib/libskarnet.so.2.14", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
[pid 28426] open("/usr/local/lib/libskarnet.so.2.14", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
[pid 28426] open("/usr/lib/libskarnet.so.2.14", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
[pid 28426] fcntl(3, F_SETFD, FD_CLOEXEC) = 0
[pid 28426] fstat(3, {st_mode=S_IFREG|0755, st_size=199984, ...}) = 0
[pid 28426] read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
[pid 28426] mmap(NULL, 241664, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fa43df0b000
[pid 28426] mmap(0x7fa43df1c000, 102400, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0x11000) = 0x7fa43df1c000
[pid 28426] mmap(0x7fa43df35000, 16384, PROT_READ, MAP_PRIVATE|MAP_FIXED, 3, 0x2a000) = 0x7fa43df35000
[pid 28426] mmap(0x7fa43df39000, 53248, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x2d000) = 0x7fa43df39000
[pid 28426] mmap(0x7fa43df3d000, 36864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa43df3d000
[pid 28426] close(3)                    = 0
[pid 28426] mprotect(0x7fa43df39000, 12288, PROT_READ) = 0
[pid 28426] mprotect(0x7fa43dff0000, 4096, PROT_READ) = 0
[pid 28426] mprotect(0x561b8d7eb000, 4096, PROT_READ) = 0
[pid 28426] chdir(".")                  = 0
[pid 28426] mmap(NULL, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa43df07000
[pid 28426] readlink("tipidee.conf", 0x7ffd612f1ec0, 4096) = -1 EINVAL (Invalid argument)
[pid 28426] getcwd("/run/user/1000/tmp", 4097) = 19
[pid 28426] open("tipidee.conf", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 3
[pid 28426] fcntl(3, F_GETFL)           = 0x8800 (flags O_RDONLY|O_NONBLOCK|O_LARGEFILE)
[pid 28426] fcntl(3, F_SETFL, O_RDONLY|O_LARGEFILE) = 0
[pid 28426] readv(3, [{iov_base="\n", iov_len=4095}, {iov_base=NULL, iov_len=0}], 2) = 1
[pid 28426] readv(3, [{iov_base="", iov_len=4095}, {iov_base="", iov_len=0}], 2) = 0
[pid 28426] close(3)                    = 0
[pid 28426] writev(1, [{iov_base="! 0 \"/run/user/1000/tmp/tipidee."..., iov_len=39}, {iov_base=NULL, iov_len=0}], 2) = 39
[pid 28425] <... readv resumed>, [{iov_base="! 0 \"/run/user/1000/tmp/tipidee."..., iov_len=4095}, {iov_base=NULL, iov_len=0}], 2) = 39
[pid 28426] exit_group(0)               = ?
[pid 28425] readv(3, [{iov_base="", iov_len=4057}, {iov_base="", iov_len=38}], 2) = 0
[pid 28426] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=28426, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG, NULL) = 28426
wait4(-1, 0x7fff33ee8204, WNOHANG, NULL) = -1 ECHILD (No child process)
rt_sigreturn({mask=[]})                 = -1 EPERM (Operation not permitted)
writev(2, [{iov_base="tipidee-config: fatal: unable to"..., iov_len=74}, {iov_base=NULL, iov_len=0}], 2tipidee-config: fatal: unable to read from preprocessor: No child process
) = 74
exit_group(111)                         = ?
+++ exited with 111 +++

Reply via email to