author | Zhizhong 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) |
commit | b0f90dfa1fbf955fb3f6df6f94037f38d734c018 (patch) | |
tree | bcacfb203f92974a4bc0951daec05a4579766ac5 | |
parent | b85dd03459445af9c870c4df084b7d26936e28b7 (diff) | |
download | media_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>
-rw-r--r-- | drivers/stream_input/amports/amstream.c | 21 |
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; } |