Opened 5 years ago
Closed 5 years ago
Last modified 5 years ago
#13415 closed Bug Report - Hang/Deadlock (Fixed)
DVBChannel hangs during Close() and Open() due to corruption of is_open
Reported by: | simonhyde | Owned by: | Klaas de Waal |
---|---|---|---|
Priority: | minor | Milestone: | 30.1 |
Component: | MythTV - DVB | Version: | v30-fixes |
Severity: | medium | Keywords: | DVB |
Cc: | Ticket locked: | no |
Description
When allowing multiple simultaneous recordings on a single tuner in DVB mode and having multiple recordings ending at the same time, mythbackend can hang.
This is because the is_open map of the "master" tuner is modified from multiple threads simultaneously. This can cause the underlying RB tree inside the QMap to get corrupted, such that the next time is_open is accessed (by DVBChannel::Open or DVBChannel::Close, for example) QMap gets stuck in an infinite loop.
Extending the hw_lock to cover is_open cures this, and I've submitted 2 pull requests on github to cover it
Against fixes/29: https://github.com/MythTV/mythtv/pull/179
And ported forward to master: https://github.com/MythTV/mythtv/pull/178
I have only built/tested the version against fixes/29, but I see no reason the fix wouldn't work on master too.
Change History (6)
comment:1 Changed 5 years ago by
Owner: | set to Klaas de Waal |
---|---|
Status: | new → assigned |
comment:2 Changed 5 years ago by
Keywords: | DVB added |
---|---|
Milestone: | needs_triage → 31.0 |
Resolution: | → Fixed |
Status: | assigned → closed |
Version: | Unspecified → Master Head |
comment:3 Changed 5 years ago by
comment:4 Changed 5 years ago by
Milestone: | 31.0 → 30.1 |
---|---|
Version: | Master Head → v30-fixes |
comment:5 Changed 5 years ago by
Backported to v30-fixes on 30 May 2019, 10:28 (7 days ago).
Branch: refs/heads/fixes/30 Home: https://github.com/MythTV/mythtv Commit: 57ffe65dbc1a80b0f4289f7c6a2b8f2e73e2cf51 https://github.com/MythTV/mythtv/commit/57ffe65dbc1a80b0f4289f7c6a2b8f2e73e2cf51 Author: Simon Hyde <simon@icedrop.net> Date: 2019-05-30 (Thu, 30 May 2019) Changed paths: M mythtv/libs/libmythtv/recorders/dvbchannel.cpp Log Message: ----------- Prevent data corruption in dvbchannel.cpp causing hang m_is_open was being corrupted by multiple simultaneous modifications, leading to it managing to create infinite loops within its underlying data structure. This patch extends the locking of m_hw_lock to cover all uses of m_is_open, preventing issues. Commit: 6bd8cd499382fd8b132218274fb4ae326c2b0243 https://github.com/MythTV/mythtv/commit/6bd8cd499382fd8b132218274fb4ae326c2b0243 Author: Klaas de Waal <klaas@modu.home.lan> Date: 2019-05-30 (Thu, 30 May 2019) Changed paths: M mythtv/libs/libmythtv/recorders/dvbchannel.cpp Log Message: ----------- Remove m_ in class member names for backport to fixes-30
Patch 178 committed to master after testing. No commit done for 30.