Commit 2ef7852
authored
fix(display): surface screen-recording write errors instead of crashing (#289)
recordScreenToFile and recordScreenAndAudioToFiles created their Annex-B
output with createWriteStream and never attached an 'error' listener, so a
stream error reached the process as an uncaught exception instead of a
rejected promise.
Callers cannot defend against that. The event bypasses the promise chain, so
wrapping the call in try/catch does not help and the process still dies:
try { await recordScreenToFile(service, path); } catch { /* never runs */ }
The likely trigger is ordinary rather than exotic: an output path whose
parent directory does not exist. A full disk or an unplugged volume
mid-recording does the same. Passing end(callback) is not a substitute -- the
callback does receive the error, but 'error' is still emitted separately and
still terminates the process.
The audio half of the same feature already guards against this in
M4aFileWriter, which holds the first error and re-throws it from the next
call. The video half did not.
AnnexBFileWriter gives the video track that same guarantee, so a failed
recording surfaces as a rejection the caller can handle. Two details differ
from M4aFileWriter deliberately:
- It does not await 'open'. Doing so would reject while the capture is
already streaming, stranding it with no handle to stop it. An open failure
surfaces from the first write instead.
- close() reports the held error in preference to ending an already-failed
stream, which answers with a generic ERR_STREAM_DESTROYED and buries the
cause. That is the common path, since the recorders write nothing until the
first keyframe arrives.
Behaviour is otherwise unchanged: the same backpressure, the same output
bytes, no public API added.1 parent ca1e8c1 commit 2ef7852
3 files changed
Lines changed: 156 additions & 32 deletions
File tree
- src/services/ios/display
- recording
- video
- test/unit/display/video
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | | - | |
4 | 1 | | |
5 | 2 | | |
6 | 3 | | |
7 | 4 | | |
8 | 5 | | |
9 | 6 | | |
10 | 7 | | |
11 | | - | |
| 8 | + | |
12 | 9 | | |
13 | 10 | | |
14 | 11 | | |
| |||
127 | 124 | | |
128 | 125 | | |
129 | 126 | | |
130 | | - | |
| 127 | + | |
131 | 128 | | |
132 | 129 | | |
133 | 130 | | |
| |||
147 | 144 | | |
148 | 145 | | |
149 | 146 | | |
150 | | - | |
151 | | - | |
152 | | - | |
| 147 | + | |
153 | 148 | | |
154 | 149 | | |
155 | 150 | | |
| |||
180 | 175 | | |
181 | 176 | | |
182 | 177 | | |
183 | | - | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
189 | | - | |
190 | | - | |
191 | | - | |
| 178 | + | |
192 | 179 | | |
193 | 180 | | |
194 | 181 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
191 | 191 | | |
192 | 192 | | |
193 | 193 | | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
194 | 257 | | |
195 | 258 | | |
196 | 259 | | |
| |||
239 | 302 | | |
240 | 303 | | |
241 | 304 | | |
242 | | - | |
| 305 | + | |
243 | 306 | | |
244 | 307 | | |
245 | 308 | | |
| |||
262 | 325 | | |
263 | 326 | | |
264 | 327 | | |
265 | | - | |
266 | | - | |
267 | | - | |
| 328 | + | |
268 | 329 | | |
269 | 330 | | |
270 | 331 | | |
| |||
277 | 338 | | |
278 | 339 | | |
279 | 340 | | |
280 | | - | |
281 | | - | |
282 | | - | |
283 | | - | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | | - | |
288 | | - | |
| 341 | + | |
289 | 342 | | |
290 | 343 | | |
291 | 344 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
3 | 6 | | |
4 | 7 | | |
5 | | - | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
6 | 12 | | |
7 | 13 | | |
8 | 14 | | |
| |||
107 | 113 | | |
108 | 114 | | |
109 | 115 | | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
0 commit comments