mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-10-01 04:43:51 +02:00
fix: two long-running HLS transcode issues (#355)
* fix: release targets from Output._targets on finalize Long-running HLS transcodes leak memory. Every finalized BufferTarget stays in _targets until the outer Output closes, pinning its buffer. Writer.finalize() already does this cleanup for writer-based flows; extend it to buffer-finalize paths via the public 'finalized' event. * fix: ReadOrchestrator LRU eviction picks only drained workers assert(pendingSlices.length === 0) fires under heavy concurrent reads (e.g. multi-rendition HLS decode from BlobSource). LRU filter only checked !running; workers with queued slices could be evicted. Add pendingSlices.length === 0 to the filter. * fix: export AppendOnlyStreamTarget from index Missing from the re-export; public docs import it by name. * fix: join HLS init segment path with root + playlist path Init path went through _getTarget bare; segments got joined with rootPath + playlist.path. Playlist-relative URI then can't resolve when the playlist lives in a subdirectory. * Fix targets not being cleaned up, fix paused workers with remaining pending slices, modify doc block, fixed isRoot not being changed on proxied requests --------- Co-authored-by: Vanilagy <[email protected]>
This commit is contained in:
co-authored by
Vanilagy
parent
7acae8dda1
commit
b05cdbe7e0
+5
-2
@@ -17,8 +17,13 @@ export class Writer {
|
||||
private pos = 0;
|
||||
|
||||
constructor(target: Target, isMonotonic: boolean) {
|
||||
if (target._writerAcquired) {
|
||||
throw new Error('Can\'t have multiple Writers for the same Target.');
|
||||
}
|
||||
|
||||
this.target = target;
|
||||
target._setMonotonicity(isMonotonic);
|
||||
target._writerAcquired = true;
|
||||
}
|
||||
|
||||
start() {
|
||||
@@ -55,10 +60,8 @@ export class Writer {
|
||||
/** Called after muxing has finished. */
|
||||
async finalize() {
|
||||
assert(this.started && !this.finalized);
|
||||
assert(this.target._output);
|
||||
|
||||
await this.target._finalize();
|
||||
this.target._output._targets.delete(this.target);
|
||||
|
||||
this.finalized = true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user