author | apollo.ling <apollo.ling@amlogic.com> | 2019-10-17 08:00:16 (GMT) |
---|---|---|
committer | Shen Liu <shen.liu@amlogic.com> | 2020-06-03 08:00:59 (GMT) |
commit | 4f5f21fbd53aea3ec69ecce6935b667a0672c714 (patch) | |
tree | 450fbe76a150f4a826626a5c70c5df00129b4db7 | |
parent | b18ab63e9d4008157e71b17bbbdd636979ec0447 (diff) | |
download | media_modules-4f5f21fbd53aea3ec69ecce6935b667a0672c714.zip media_modules-4f5f21fbd53aea3ec69ecce6935b667a0672c714.tar.gz media_modules-4f5f21fbd53aea3ec69ecce6935b667a0672c714.tar.bz2 |
vdec: avoid double release same resources [1/1]
PD#SWPL-10720
Problem:
Media AutoTest system met kernel crash and RAM DUMP
Solution:
check to avoid double release same resources
Verify:
P215
Change-Id: I58928ad333036aa4e146798f50764a9e201c4ecd
Signed-off-by: apollo.ling <apollo.ling@amlogic.com>
-rw-r--r-- | drivers/frame_provider/decoder/utils/vdec_input.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/frame_provider/decoder/utils/vdec_input.c b/drivers/frame_provider/decoder/utils/vdec_input.c index 0462abe..8f1f913 100644 --- a/drivers/frame_provider/decoder/utils/vdec_input.c +++ b/drivers/frame_provider/decoder/utils/vdec_input.c @@ -991,11 +991,26 @@ EXPORT_SYMBOL(vdec_input_next_input_chunk); void vdec_input_release_chunk(struct vdec_input_s *input, struct vframe_chunk_s *chunk) { + struct vframe_chunk_s *p; + u32 chunk_valid = 0; unsigned long flags; struct vframe_block_list_s *block = chunk->block; struct vframe_block_list_s *tofreeblock = NULL; flags = vdec_input_lock(input); + list_for_each_entry(p, &input->vframe_chunk_list, list) { + if (p == chunk) { + chunk_valid = 1; + break; + } + } + /* 2 threads go here, the other done the deletion,so return*/ + if (chunk_valid == 0) { + vdec_input_unlock(input, flags); + pr_err("%s chunk is deleted,so return.\n", __func__); + return; + } + list_del(&chunk->list); input->have_frame_num--; ATRACE_COUNTER(MEM_NAME, input->have_frame_num); |