diff --git a/drivers/media/test-drivers/vidtv/vidtv_bridge.c b/drivers/media/test-drivers/vidtv/vidtv_bridge.c index a8a76434989c..3ea8cc04571d 100644 --- a/drivers/media/test-drivers/vidtv/vidtv_bridge.c +++ b/drivers/media/test-drivers/vidtv/vidtv_bridge.c @@ -548,7 +548,13 @@ static void vidtv_bridge_remove(struct platform_device *pdev) media_device_cleanup(&dvb->mdev); #endif /* CONFIG_MEDIA_CONTROLLER_DVB */ - mutex_destroy(&dvb->feed_lock); + mutex_lock(&dvb->feed_lock); + if (dvb->streaming) { + dvb->streaming = false; + vidtv_mux_destroy(dvb->mux); + dvb->mux = NULL; + } + mutex_unlock(&dvb->feed_lock); for (i = 0; i < NUM_FE; ++i) { dvb_unregister_frontend(dvb->fe[i]); @@ -559,6 +565,8 @@ static void vidtv_bridge_remove(struct platform_device *pdev) dvb_dmxdev_release(&dvb->dmx_dev); dvb_dmx_release(&dvb->demux); dvb_unregister_adapter(&dvb->adapter); + + mutex_destroy(&dvb->feed_lock); dev_info(&pdev->dev, "Successfully removed vidtv\n"); }