GitHub
Moderator
[SoftCSA] Fix shutdown deadlock on mipsel
On mipsel (Broadcom BCM7362), DMX_STOP on PVR-sourced demux filters
either deadlocks (when no data is flowing) or crashes with a NULL
pointer dereference in BXPT_Playback_StopChannel (when data is still
flowing through the playpump).
Add eTSMPEGDecoder::freeDecoder() which releases the internal demux
filter objects (video, audio, PCR, text) by closing their fds via
destructors instead of calling DMX_STOP. The kernel cleans up filters
through the close() path without going through the Broadcom playpump.
After freeDecoder(), the destructor's setState() is a no-op since
m_changed=0 and all filter objects are nullptr.
Also release m_video_event_connection in eDVBServicePlay before
stopping the SoftDecoder, as the eConnection holds a ref to the
SoftDecoder that would defer the decoder destructor.
Author: @WXbet
Continue reading...
On mipsel (Broadcom BCM7362), DMX_STOP on PVR-sourced demux filters
either deadlocks (when no data is flowing) or crashes with a NULL
pointer dereference in BXPT_Playback_StopChannel (when data is still
flowing through the playpump).
Add eTSMPEGDecoder::freeDecoder() which releases the internal demux
filter objects (video, audio, PCR, text) by closing their fds via
destructors instead of calling DMX_STOP. The kernel cleans up filters
through the close() path without going through the Broadcom playpump.
After freeDecoder(), the destructor's setState() is a no-op since
m_changed=0 and all filter objects are nullptr.
Also release m_video_event_connection in eDVBServicePlay before
stopping the SoftDecoder, as the eConnection holds a ref to the
SoftDecoder that would defer the decoder destructor.
Author: @WXbet
Continue reading...