From b0f90dfa1fbf955fb3f6df6f94037f38d734c018 Mon Sep 17 00:00:00 2001 From: Zhizhong Zhang Date: Fri, 25 Oct 2019 05:22:58 +0000 Subject: 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 --- 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; } -- cgit