This is a maintenance release in the 2.4.x series, bringing a handful of bug fixes, a couple of small new features, and, most
importantly, a focused round of performance work that cuts CPU usage by 10-25% across the board on real workloads.
See our blog post for more details about the optimizations in this release.
We recommend that anyone running any 2.4.x release upgrades to 2.4.5 when possible. As always, please test in a staging environment before deploying to production.
Full changelog
New:
- Added
removeandremove_request_idmethods torequest.queueto remove
a specific request from the queue, also available as a telnetremovecommand (#5237) - Improved error messages in playlist parsers to include more context about the
source of the error - Added
audio/aiff,audio/x-aiffandaudio/x-wavpackentries to
the defaultsettings.http.mime.extnamestable soprotocol.httpresolves
AIFF and WavPack URLs to their real extensions instead of the.osb
fallback.
Fixed:
- Fixed crash when external input (
input.process,input.ffmpeg, etc.) encounters an EOF (thanks to @MikaSappi, #5139) - Fixed
harbor.remove_http_handlerdiscarding all registered handlers except the one being removed - Fixed crash in
crossfade/crosswhensource.skipis called from outside the clock thread, e.g. from aharbor.httphandler orthread.run(#5194) - Fixed memory leak in
Strings.Mutable(#5231)
Optimized:
- Clock sync-source propagation is now push-based and O(1) per tick instead of scanning all sources (#5133)
- Stream format/kind dispatch now uses O(1) int-indexed array lookup instead of iterating a queue (#5136)
- Optimized
content_lengthand timed blit hot paths (#5137) - Chunk total length is now cached in the chunks record to avoid recomputation (#5140)
- Chunk length is now pre-computed on lift (#5135)
- Watcher before/after cycle callbacks are only registered when watchers are actually present
WeakQueuenow uses geometric doubling and a RW-lock for faster concurrent access (#5118)- Use direct
Intcomparison functions in stream hot paths