From 5108ba13c1f423fffe7ce7e407b09946215c99f6 Mon Sep 17 00:00:00 2001 From: apollo.ling Date: Thu, 17 Oct 2019 08:00:16 +0000 Subject: 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 --- diff --git a/drivers/frame_provider/decoder/utils/vdec_input.c b/drivers/frame_provider/decoder/utils/vdec_input.c index d819885..8550575 100644 --- a/drivers/frame_provider/decoder/utils/vdec_input.c +++ b/drivers/frame_provider/decoder/utils/vdec_input.c @@ -998,11 +998,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); -- cgit