TLDR: check your tvheadend logs, you might see why the HDHomeRun tuners are getting locked indefinitely. In my case I run an unraid docker and had to dump the logs with from an unraid terminal with "# docker logs <container id>", where <container ID> was obtained from "# docker ps".
I started hitting this same HDHomeRun all tuners locked issue after moving my unraid linuxserver/tvheadend docker back to the 'current / latest / not a specific release' tag after freezing it on a specific release tag years ago. It's been so long I don't even remember the exact reason why I froze it. It was most likely the docker not starting after an update since I had to deal with that after switching to the current release (a recording profile that was no longer valid caused tvheadend to assert and exit at startup in a loop).
After hitting this locked tuner issue a half dozen times in the past couple weeks I finally decided to dig in. In my case the logs show:
1 - tvheadend attempts to start a scheduled recording, and as part of this it acquires the first available HDHomeRun tuner and tunes it to the required channel
2 - libav asserts while setting up the recording, and the logs show this assert causes tvheadend to restart
3 - The HDHomeRun tuner acquired in Step 1 is now locked indefinitely
4 - During startup tvheadend realizes the recording from Step 1 needs to be scheduled
5 - Repeat Steps 1-4 until all tuners are locked indefinitely
The recording assert I'm hitting is related to the recording profile which would have been created many years ago. I'm speculating here, but I suspect that problem docker upgrade that caused me to freeze the image was due to some kind of tvheadend config rework where some config items were no longer valid but the config was not automatically converted during the upgrade.
I've now switched all my recordings to a recording profile I know works. This working vaapi + x265 profile actually had to be recreated from scratch after I unfroze tvheadend because tvheadend was asserting at startup trying to load in that profile (what I referred to earlier).
I've pasted the relevant logs for me next. If I DON'T follow up in here it means switching the recording profile resolved my locked tuner issue.
2025-06-20 06:59:15.000 [ INFO] dvr: "<the show>" on "<the channel>" recorder starting
2025-06-20 06:59:15.000 [ INFO] mpegts: 177.028MHz in ATSC-T Network - tuning on HDHomeRun ATSC-T Tuner #0 (<HDHomeRun IP>)
2025-06-20 06:59:15.007 [ INFO] tvhdhomerun: tuning to auto6t:177028615
2025-06-20 06:59:15.032 [ INFO] subscription: 0008: "DVR: <the show>" subscribing on channel "<the channel>", weight: 500, adapter: "HDHomeRun ATSC-T Tuner #0 (<HDHomeRun IP>)", network: "ATSC-T Network", mux: "177.028MHz", service: "<service>", profile="x264-aac-matroska", username="<user name>"
2025-06-20 06:59:15.359 [ INFO] transcode: 0003: 01:MPEG2VIDEO: ==> Using profile x264-hw-hq 6000
2025-06-20 06:59:15.359 [ INFO] transcode: 0003: 02:AC3: ==> Using profile webtv-aac
2025-06-20 06:59:16.044 [ ERROR] vaapi: Bitrate 6000 kbps is greater than Max bitrate 0 kbps, increase Max bitrate to 6000 kbps
2025-06-20 06:59:16.044 [ INFO] vaapi: Bitrate = 6000 kbps; Buffer size = 36000 kbps; Max bitrate = 6000 kbps
2025-06-20 06:59:16.045 [WARNING] libav: AVCodecContext: Buffering settings are ignored in AVBR RC mode.
2025-06-20 06:59:16.101 [ ERROR] libav: AVCodecContext: Failed to end picture encode issue: 24 (internal encoding error).
2025-06-20 06:59:16.101 [ ERROR] libav: AVCodecContext: Encode failed: -5.
2025-06-20 06:59:16.104 [EMERGENCY] libav: Assertion pic->display_order == pic->encode_order failed at libavcodec/vaapi_encode_h264.c:612
2025-06-20 06:59:16.304 [ INFO] main: Log started
2025-06-20 06:59:16.304 [ INFO] config: Using configuration from '/config'
2025-06-20 06:59:16.307 [ INFO] http: Starting HTTP server 0.0.0.0:9981
2025-06-20 06:59:16.307 [ INFO] htsp: Starting HTSP server 0.0.0.0:9982
2025-06-20 06:59:16.342 [ INFO] config: loaded
<this is tvheadend restarting after the assert above>
...
<repeat 3 more times to lock all 4 of my HDHomeRun tuners>
...
2025-06-20 06:59:39.465 [ INFO] mpegts: 177.028MHz in ATSC-T Network - tuning on HDHomeRun ATSC-T Tuner #1 (<HDHomeRun IP>)
2025-06-20 06:59:39.465 [ INFO] tvhdhomerun: tuning to auto6t:177028615
2025-06-20 06:59:39.483 [ ERROR] tvhdhomerun: failed to acquire lockkey: ERROR: resource locked by <unraid server IP>
2025-06-20 06:59:39.484 [ ERROR] tvhdhomerun: failed to reset pfilter: 0
2025-06-20 06:59:41.469 [ INFO] mpegts: 177.028MHz in ATSC-T Network - tuning on HDHomeRun ATSC-T Tuner #2 (<HDHomeRun IP>)
2025-06-20 06:59:41.469 [ INFO] tvhdhomerun: tuning to auto6t:177028615
2025-06-20 06:59:41.486 [ ERROR] tvhdhomerun: failed to acquire lockkey: ERROR: resource locked by <unraid server IP>
2025-06-20 06:59:41.487 [ ERROR] tvhdhomerun: failed to reset pfilter: 0
2025-06-20 06:59:43.472 [ INFO] mpegts: 177.028MHz in ATSC-T Network - tuning on HDHomeRun ATSC-T Tuner #3 (<HDHomeRun IP>)
2025-06-20 06:59:43.472 [ INFO] tvhdhomerun: tuning to auto6t:177028615
2025-06-20 06:59:43.489 [ ERROR] tvhdhomerun: failed to acquire lockkey: ERROR: resource locked by <unraid server IP>
2025-06-20 06:59:43.490 [ ERROR] tvhdhomerun: failed to reset pfilter: 0
2025-06-20 06:59:47.475 [ NOTICE] subscription: 0001: No input source available for subscription "DVR: <the show>" to channel "<the channel>"
2025-06-20 06:59:47.475 [ ERROR] dvr: Recording unable to start: "<the show>": No free adapter
2025-06-20 06:59:49.475 [ NOTICE] subscription: 0001: No input source available for subscription "DVR: <the show>" to channel "<the channel>"
<previous log floods until the show trying to be recorded ends>