Skip to content

Commit 05bb461

Browse files
authored
fix(@moq/watch): guard decoder cleanup against already-closed codec (#1230)
1 parent ec074ca commit 05bb461

2 files changed

Lines changed: 9 additions & 3 deletions

File tree

js/watch/src/audio/decoder.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,9 @@ export class Decoder {
211211
},
212212
error: (error) => console.error(error),
213213
});
214-
effect.cleanup(() => decoder.close());
214+
effect.cleanup(() => {
215+
if (decoder.state !== "closed") decoder.close();
216+
});
215217

216218
const description = config.description ? Util.Hex.toBytes(config.description) : undefined;
217219
decoder.configure({
@@ -262,7 +264,9 @@ export class Decoder {
262264
output: (data) => this.#emit(data),
263265
error: (error) => console.error(error),
264266
});
265-
effect.cleanup(() => decoder.close());
267+
effect.cleanup(() => {
268+
if (decoder.state !== "closed") decoder.close();
269+
});
266270

267271
// Configure decoder with description from catalog
268272
decoder.configure({

js/watch/src/video/decoder.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,9 @@ class DecoderTrack {
270270
effect.close();
271271
},
272272
});
273-
effect.cleanup(() => decoder.close());
273+
effect.cleanup(() => {
274+
if (decoder.state !== "closed") decoder.close();
275+
});
274276

275277
// Input processing - depends on container type
276278
if (this.config.container.kind === "cmaf") {

0 commit comments

Comments
 (0)