summaryrefslogtreecommitdiff
authorZhizhong Zhang <zhizhong.zhang@amlogic.com>2019-10-25 05:22:58 (GMT)
committer Zhi Zhou <zhi.zhou@amlogic.com>2019-10-28 11:21:46 (GMT)
commitb0f90dfa1fbf955fb3f6df6f94037f38d734c018 (patch)
treebcacfb203f92974a4bc0951daec05a4579766ac5
parentb85dd03459445af9c870c4df084b7d26936e28b7 (diff)
downloadmedia_modules-b0f90dfa1fbf955fb3f6df6f94037f38d734c018.zip
media_modules-b0f90dfa1fbf955fb3f6df6f94037f38d734c018.tar.gz
media_modules-b0f90dfa1fbf955fb3f6df6f94037f38d734c018.tar.bz2
amports: audio: Add mutex lock protect for audio port reset [1/1]
PD#OTT-6893 Problem: System restart after launch/exit LiveTv multiple Solution: Add mutex lock protect for audio port reset Verify: patch build of U212 Change-Id: Id175422a3c829e23b59927aea6c60e8818b9dd37 Signed-off-by: Zhizhong Zhang <zhizhong.zhang@amlogic.com>
Diffstat
-rw-r--r--drivers/stream_input/amports/amstream.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/drivers/stream_input/amports/amstream.c b/drivers/stream_input/amports/amstream.c
index 8c9ef11..51fd4b7 100644
--- a/drivers/stream_input/amports/amstream.c
+++ b/drivers/stream_input/amports/amstream.c
@@ -555,6 +555,9 @@ static void port_set_inited(struct port_priv_s *priv)
struct vdec_s *vdec = priv->vdec;
vdec->port_flag |= PORT_FLAG_INITED;
+ port->flag |= PORT_FLAG_INITED;
+ pr_info("vdec->port_flag=0x%x, port_flag=0x%x\n",
+ vdec->port_flag, port->flag);
} else
port->flag |= PORT_FLAG_INITED;
}
@@ -716,23 +719,35 @@ static int audio_port_reset(struct stream_port_s *port,
struct stream_buf_s *pbuf)
{
int r;
-
+ mutex_lock(&amstream_mutex);
if ((port->flag & PORT_FLAG_AFORMAT) == 0) {
pr_err("aformat not set\n");
+ mutex_unlock(&amstream_mutex);
+ return 0;
+ }
+
+ pr_info("audio port reset, flag:0x%x\n", port->flag);
+ if ((port->flag & PORT_FLAG_INITED) == 0) {
+ pr_info("audio port not inited,return\n");
+ mutex_unlock(&amstream_mutex);
return 0;
}
+ pr_info("audio_port_reset begin\n");
pts_stop(PTS_TYPE_AUDIO);
stbuf_release(pbuf, false);
r = stbuf_init(pbuf, NULL, false);
- if (r < 0)
+ if (r < 0) {
+ mutex_unlock(&amstream_mutex);
return r;
+ }
r = adec_init(port);
if (r < 0) {
audio_port_release(port, pbuf, 2);
+ mutex_unlock(&amstream_mutex);
return r;
}
@@ -755,6 +770,8 @@ static int audio_port_reset(struct stream_port_s *port,
r = pts_start(PTS_TYPE_AUDIO);
+ pr_info("audio_port_reset done\n");
+ mutex_unlock(&amstream_mutex);
return r;
}