Subject: bug#57215: ci: Fail to evaluate Guix specification

From: Mathieu Othacehe <[email-masked]>
Date: Mon, 15 Aug 2022 14:01:38 +0200

Hello,

> [pid 74060] --- SIGPIPE {si_signo=SIGPIPE, si_code=SI_USER, si_pid=74060, si_uid=997} ---
>
> The evaluation process receives a SIGPIPE when trying to write the
> evaluation result to the pipe connecting it to "cuirass register".

I think this is a wrong lead. The cuirass evaluation process looks like:

                                                           --- pipe B ---> inferior I1 
"cuirass register" <--- pipe A ---> "cuirass evaluate"  <--|
                                                           --- pipe C ---> inferior I2 

In short, "cuirass register" is a daemon monitoring Git repositories and
triggering sporadic "cuirass evaluate" processes. Those processes use
inferiors to evaluate the new derivations.

The SIGPIPE observed with strace doesn't correspond to pipe A but to
pipe B or C. The issue here is probably that "cuirass evaluate" dies
unexpectedly which causes the inferior I1 or I2 to receive a SIGPIPE
when writing to a pipe which is not listened to anymore.

Stracing the "cuirass evaluate" process shows indeed that it dies
unexpectedly by receiving a SIGABRT signal.

--8<---------------cut here---------------start------------->8---
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
pselect6(242, [3 227 241], [], [], NULL, NULL
 <unfinished ...>) = ?
+++ killed by SIGABRT +++
--8<---------------cut here---------------end--------------->8---

I tried to use gdb to get more details:

--8<---------------cut here---------------start------------->8---
Thread 28 "guile" received signal SIGABRT, Aborted.
[Switching to LWP 113115]
0x00007f890b618030 in raise () from /gnu/store/5h2w4qi9hk1qzzgi1w83220ydslinr4s-glibc-2.33/lib/libc.so.6
(gdb) bt
#0  0x00007f890b618030 in raise () from /gnu/store/5h2w4qi9hk1qzzgi1w83220ydslinr4s-glibc-2.33/lib/libc.so.6
#1  0x00007f890b602526 in abort () from /gnu/store/5h2w4qi9hk1qzzgi1w83220ydslinr4s-glibc-2.33/lib/libc.so.6
#2  0x00007f890bb94198 in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#3  0x00007f890bc38728 in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#4  0x00007f88dcce625f in ?? ()
#5  0x00007f8903a5eacc in ?? ()
#6  0x00007f88e31eb8a0 in ?? ()
#7  0x0000000000000006 in ?? ()
#8  0x00007f890bbd6ccc in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#9  0x00007f890bc2bf3c in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#10 0x00007f890bc395e9 in scm_call_n () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#11 0x00007f890bb9da0e in scm_call_with_unblocked_asyncs () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#12 0x00007f890bc2c336 in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#13 0x00007f890bc395e9 in scm_call_n () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#14 0x00007f890bc28be6 in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#15 0x00007f890bb9f85a in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#16 0x00007f88dcc8e482 in ?? ()
#17 0x00007f8903a5e7e0 in ?? ()
#18 0x00007f8901d4be30 in ?? ()
#19 0x0000000000000048 in ?? ()
#20 0x00007f890bbd6ccc in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#21 0x00007f890bc2bf3c in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#22 0x00007f890bc395e9 in scm_call_n () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#23 0x00007f890bba109a in scm_call_2 () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#24 0x00007f890bc57752 in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#25 0x00007f890bc2988f in scm_c_catch () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#26 0x00007f890bba1e66 in scm_c_with_continuation_barrier () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#27 0x00007f890bc28b39 in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#28 0x00007f890baff0ba in GC_call_with_stack_base () from /gnu/store/2lczkxbdbzh4gk7wh91bzrqrk7h5g1dl-libgc-8.0.4/lib/libgc.so.1
#29 0x00007f890bc2116d in ?? () from /gnu/store/1jgcbdzx2ss6xv59w55g3kr3x4935dfb-guile-3.0.8/lib/libguile-3.0.so.1
#30 0x00007f890bad5d7e in ?? () from /gnu/store/5h2w4qi9hk1qzzgi1w83220ydslinr4s-glibc-2.33/lib/libpthread.so.0
#31 0x00007f890b6d3eff in clone () from /gnu/store/5h2w4qi9hk1qzzgi1w83220ydslinr4s-glibc-2.33/lib/libc.so.6
--8<---------------cut here---------------end--------------->8---

but the backtrace doesn't help much. I can try to use Guile with symbols
to have a more detailed backtrace.

Anyone knows what could cause Guile to receive a SIGABRT signal?

Thanks,

Mathieu