Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

interrupting devtools::test() leaves behind recursively-faulting R processes #1819

Closed
kevinushey opened this issue Jun 9, 2023 · 9 comments

Comments

@kevinushey
Copy link
Collaborator

To reproduce, in RStudio:

  • Use Cmd + Shift + T to run tests,
  • Wait until the parallel test runner has started,
  • Stop the running tests with the stop button.

The running R process receives a SIGTERM and exits, but the sub-processes are left behind.

At least on macOS, those processes get stuck in an infinite busy loop, chewing up lots of CPU. lldb reports:

(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x7)
  * frame #0: 0x00000001026a74fc libR.dylib`R_GetTracebackOnly(skip=0) at errors.c:1564:19 [opt]
    frame #1: 0x00000001026a76a4 libR.dylib`R_GetTraceback(skip=<unavailable>) at errors.c:1605:9 [opt]
    frame #2: 0x0000000102701720 libR.dylib`sigactionSegv(signum=11, ip=0x00000001284a8250, context=<unavailable>) at main.c:602:2 [opt]
    frame #3: 0x0000000186206a24 libsystem_platform.dylib`_sigtramp + 56

so it seems like the R processes are getting stuck recursively handling SIGSEGV errors.

@kevinushey
Copy link
Collaborator Author

One workaround is to set:

Sys.setenv(R_NO_SEGV_HANDLER = 1)

so that R doesn't try to install its SEGV handlers.

@kevinushey
Copy link
Collaborator Author

I filed a bug report for R as well; I believe R should be unsetting the SEGV handler while processing the signal. https://bugs.r-project.org/show_bug.cgi?id=18551

@gaborcsardi
Copy link
Member

Seems like R_NO_SEGV_HANDLER needs R 4.1.2, but hopefully we can find a solution that works on older R as well.

@gaborcsardi
Copy link
Member

Btw. I also don't really understand why the subprocesses of the test process get SEGV signals.

@kevinushey
Copy link
Collaborator Author

Here's a traceback I was able to capture:

Thread 0::  Dispatch queue: com.apple.main-thread
0   libsystem_pthread.dylib       	       0x1861d3788 pthread_self + 24
1   processx.so                   	       0x104d71274 processx__sigchld_callback + 52
2   libsystem_platform.dylib      	       0x186206a24 _sigtramp + 56
3   libR.dylib                    	       0x100ac8f0c R_restore_globals + 24 (context.c:178) [inlined]
4   libR.dylib                    	       0x100ac8f0c R_jumpctxt + 268 (context.c:231)
5   libR.dylib                    	       0x100ac9348 Rf_endcontext + 520 (context.c:321)
6   libR.dylib                    	       0x100b2bd24 R_execClosure + 3108 (eval.c:2190)
7   libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
8   libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
9   libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
10  libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
11  libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
12  libR.dylib                    	       0x100b0f35c Rf_eval + 1308 (eval.c:1140)
13  libR.dylib                    	       0x100b077cc vsignalError + 1100 (errors.c:1903)
14  libR.dylib                    	       0x100b07330 Rf_errorcall + 176 (errors.c:912)
15  libR.dylib                    	       0x100b08a70 Rf_error + 112 (errors.c:963)
16  libR.dylib                    	       0x100b6d25c SET_STRING_ELT + 412 (memory.c:4088)
17  libR.dylib                    	       0x100ad81a0 writeline + 56 (deparse.c:1528) [inlined]
18  libR.dylib                    	       0x100ad81a0 deparse2 + 80 (deparse.c:554) [inlined]
19  libR.dylib                    	       0x100ad81a0 deparse1WithCutoff + 544 (deparse.c:282)
20  libR.dylib                    	       0x100ad8438 Rf_deparse1m + 120 (deparse.c:198)
21  libR.dylib                    	       0x100b0a834 R_GetTraceback + 308 (errors.c:1613)
22  libR.dylib                    	       0x100b65f60 sigactionSegv + 352 (main.c:602)
23  libsystem_platform.dylib      	       0x186206a24 _sigtramp + 56
24  libR.dylib                    	       0x100ac8f0c R_restore_globals + 24 (context.c:178) [inlined]
25  libR.dylib                    	       0x100ac8f0c R_jumpctxt + 268 (context.c:231)
26  libR.dylib                    	       0x100ac9348 Rf_endcontext + 520 (context.c:321)
27  libR.dylib                    	       0x100b2bd24 R_execClosure + 3108 (eval.c:2190)
28  libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
29  libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
30  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
31  libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
32  libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
33  libR.dylib                    	       0x100b0f35c Rf_eval + 1308 (eval.c:1140)
34  libR.dylib                    	       0x100b2fe34 do_eval + 1396 (eval.c:3625)
35  libR.dylib                    	       0x100b16a64 bcEval + 29540 (eval.c:7446)
36  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
37  libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
38  libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
39  libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
40  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
41  libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
42  libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
43  libR.dylib                    	       0x100b0f35c Rf_eval + 1308 (eval.c:1140)
44  libR.dylib                    	       0x100b30098 do_eval + 2008 (eval.c:3648)
45  libR.dylib                    	       0x100b16a64 bcEval + 29540 (eval.c:7446)
46  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
47  libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
48  libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
49  libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
50  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
51  libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
52  libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
53  libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
54  libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
55  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
56  libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
57  libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
58  libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
59  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
60  libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
61  libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
62  libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
63  libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
64  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
65  libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
66  libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
67  libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
68  libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
69  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
70  libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
71  libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
72  libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
73  libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
74  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
75  libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
76  libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
77  libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
78  libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
79  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
80  libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
81  libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
82  libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
83  libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
84  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
85  libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
86  libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
87  libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
88  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
89  libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
90  libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
91  libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
92  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
93  libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
94  libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
95  libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
96  libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
97  libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
98  libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
99  libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
100 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
101 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
102 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
103 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
104 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
105 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
106 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
107 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
108 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
109 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
110 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
111 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
112 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
113 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
114 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
115 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
116 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
117 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
118 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
119 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
120 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
121 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
122 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
123 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
124 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
125 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
126 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
127 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
128 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
129 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
130 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
131 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
132 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
133 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
134 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
135 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
136 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
137 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
138 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
139 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
140 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
141 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
142 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
143 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
144 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
145 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
146 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
147 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
148 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
149 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
150 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
151 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
152 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
153 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
154 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
155 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
156 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
157 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
158 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
159 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
160 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
161 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
162 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
163 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
164 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
165 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
166 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
167 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
168 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
169 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
170 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
171 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
172 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
173 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
174 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
175 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
176 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
177 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
178 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
179 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
180 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
181 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
182 libR.dylib                    	       0x100b0f35c Rf_eval + 1308 (eval.c:1140)
183 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
184 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
185 libR.dylib                    	       0x100b0f35c Rf_eval + 1308 (eval.c:1140)
186 libR.dylib                    	       0x100aae644 do_docall + 644 (coerce.c:2746)
187 libR.dylib                    	       0x100b16a64 bcEval + 29540 (eval.c:7446)
188 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
189 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
190 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
191 libR.dylib                    	       0x100b0f35c Rf_eval + 1308 (eval.c:1140)
192 libR.dylib                    	       0x100aae644 do_docall + 644 (coerce.c:2746)
193 libR.dylib                    	       0x100b16a64 bcEval + 29540 (eval.c:7446)
194 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
195 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
196 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
197 libR.dylib                    	       0x100b0f35c Rf_eval + 1308 (eval.c:1140)
198 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
199 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
200 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
201 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
202 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
203 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
204 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
205 libR.dylib                    	       0x100b0f35c Rf_eval + 1308 (eval.c:1140)
206 libR.dylib                    	       0x100b2e48c do_begin + 396 (eval.c:2798)
207 libR.dylib                    	       0x100b0f288 Rf_eval + 1096 (eval.c:1092)
208 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
209 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
210 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
211 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
212 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
213 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
214 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
215 libR.dylib                    	       0x100b0f35c Rf_eval + 1308 (eval.c:1140)
216 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
217 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
218 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
219 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
220 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
221 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
222 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
223 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
224 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
225 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
226 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
227 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
228 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
229 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
230 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
231 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
232 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
233 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
234 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
235 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
236 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
237 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
238 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
239 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
240 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
241 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
242 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
243 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
244 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
245 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
246 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
247 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
248 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
249 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
250 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
251 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
252 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
253 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
254 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
255 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
256 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
257 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
258 libR.dylib                    	       0x100b29ca4 forcePromise + 164 (eval.c:833)
259 libR.dylib                    	       0x100b36af0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
260 libR.dylib                    	       0x100b36af0 getvar + 688 (eval.c:5508)
261 libR.dylib                    	       0x100b13578 bcEval + 15992 (eval.c:7198)
262 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
263 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
264 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
265 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
266 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
267 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
268 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
269 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
270 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
271 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
272 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
273 libR.dylib                    	       0x100b16244 bcEval + 27460 (eval.c:7414)
274 libR.dylib                    	       0x100b0f088 Rf_eval + 584 (eval.c:1013)
275 libR.dylib                    	       0x100b2bd0c R_execClosure + 3084
276 libR.dylib                    	       0x100b2a58c Rf_applyClosure + 524 (eval.c:2113)
277 libR.dylib                    	       0x100b0f35c Rf_eval + 1308 (eval.c:1140)
278 libR.dylib                    	       0x100b2e48c do_begin + 396 (eval.c:2798)
279 libR.dylib                    	       0x100b0f288 Rf_eval + 1096 (eval.c:1092)
280 libR.dylib                    	       0x100b633f4 Rf_ReplIteration + 756 (main.c:262)
281 libR.dylib                    	       0x100b64968 R_ReplConsole + 168 (main.c:314)
282 libR.dylib                    	       0x100b648a4 run_Rmainloop + 100 (main.c:1200)
283 libR.dylib                    	       0x100b64a10 Rf_mainloop + 16 (main.c:1207)
284 R                             	       0x10062bea0 main + 32
285 dyld                          	       0x185e7ff28 start + 2236

@gaborcsardi
Copy link
Member

Thanks! Is this the test process or a subprocess of the test process?

@kevinushey
Copy link
Collaborator Author

Other traces look different, but one common thing I'm noticing is that R is being run on multiple threads...

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   libR.dylib                    	       0x104ddde18 Rf_framedepth + 32 (context.c:447) [inlined]
1   libR.dylib                    	       0x104ddde18 do_sys + 280 (context.c:666)
2   libR.dylib                    	       0x104e2aa64 bcEval + 29540 (eval.c:7446)
3   libR.dylib                    	       0x104e23088 Rf_eval + 584 (eval.c:1013)
4   libR.dylib                    	       0x104e3fd0c R_execClosure + 3084
5   libR.dylib                    	       0x104e3e58c Rf_applyClosure + 524 (eval.c:2113)
6   libR.dylib                    	       0x104e2a244 bcEval + 27460 (eval.c:7414)
7   libR.dylib                    	       0x104e23088 Rf_eval + 584 (eval.c:1013)
8   libR.dylib                    	       0x104e3dca4 forcePromise + 164 (eval.c:833)
9   libR.dylib                    	       0x104e4aaf0 FORCE_PROMISE + 8 (eval.c:5467) [inlined]
10  libR.dylib                    	       0x104e4aaf0 getvar + 688 (eval.c:5508)
11  libR.dylib                    	       0x104e27578 bcEval + 15992 (eval.c:7198)
12  libR.dylib                    	       0x104e23088 Rf_eval + 584 (eval.c:1013)
13  libR.dylib                    	       0x104e3fd0c R_execClosure + 3084
14  libR.dylib                    	       0x104e3e58c Rf_applyClosure + 524 (eval.c:2113)
15  libR.dylib                    	       0x104e2a244 bcEval + 27460 (eval.c:7414)

Thread 1:
0   libR.dylib                    	       0x104e1e57c R_GetTracebackOnly + 60 (errors.c:1566)
1   libR.dylib                    	       0x104e1e724 R_GetTraceback + 36 (errors.c:1607)
2   libR.dylib                    	       0x104e79f60 sigactionSegv + 352 (main.c:602)
3   libsystem_platform.dylib      	       0x186206a24 _sigtramp + 56

It seems like the SEGV handler isn't actually being run on the main R thread? So the processx bit might be a red herring; it's more that we have multiple threads and the signal handler isn't being assigned to the main thread for some reason?

@jennybc
Copy link
Member

jennybc commented Jun 17, 2023

I'm just here to say that I experienced something that presented exactly like this:

At least on macOS, those processes get stuck in an infinite busy loop, chewing up lots of CPU

while running testthat's tests (by mistake), then interrupting them.

gaborcsardi added a commit to r-lib/processx that referenced this issue Jun 17, 2023
Otherwise a SIGPIPE may freeze an R process, like we
saw in parallel testthat tests:
r-lib/testthat#1819

Here the main proces is killed, but the worker
processes are not, and when a worker process
tries to send the test results to the main process,
a `write()` on its pipe gets a `SIGPIPE.

Unclear why, but the `SIGPIPE` sometimes causes
a `SIGSEGV`, for which R tries to print the stack,
but gets another `SIGSEGV`, and so on.
@gaborcsardi
Copy link
Member

This is now fixed in processx with r-lib/processx@da4cf5a

I'll make a processx release sure, after which testthat could depend on the new processx version. Until then, you can use the R_NO_SEGV_HANDLER workaround.

@hadley hadley closed this as completed Jun 30, 2023
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Aug 15, 2023
# processx 3.8.2

* The client library, used by callr, now ignores `SIGPIPE` when writing
  to a file descriptor, on unix. This avoid possible freezes when a
  `callr::r_session` subprocess is trying to report its result after the
  main process was terminated. In particular, this happened with parallel
  testthat: r-lib/testthat#1819
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants