[M120][WebMedia] Fix EME read_cb crash issue 04/321204/2
authorxiaofang <fang.xiao@samsung.com>
Fri, 29 Nov 2024 02:45:00 +0000 (10:45 +0800)
committerxiaofang <fang.xiao@samsung.com>
Fri, 29 Nov 2024 03:39:05 +0000 (11:39 +0800)
Issue:
ESPP readytoprepare received will trigger read data from demuxer,JS do seek at this moment however demuxer is waiting for more data arrived.
Seek cannot finished in time, JS will seek same time again, mediaplusplayer will prepare again and received readytoprepare twice time.
demuxer read is triggered again which result read_cb crash.

Solution:
If read is in progress, ignore read again.

Change-Id: Idb29bf71ca40a7bb5a2a41aa6eef3d975657fce2
Signed-off-by: xiaofang <fang.xiao@samsung.com>
media/filters/decrypting_demuxer_stream.cc

index aa63e0ac5ecf01349a268c3dd3cab703bd7ecb53..c6bb544e135fda9dd1004da1162039c79ac36775 100644 (file)
@@ -77,9 +77,13 @@ void DecryptingDemuxerStream::Read(uint32_t count, ReadCB read_cb) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(state_, kIdle) << state_;
   DCHECK(read_cb);
-  CHECK(!read_cb_) << "Overlapping reads are not supported.";
   DCHECK_EQ(count, 1u) << "DecryptingDemuxerStream only reads a single-buffer.";
 
+  if (read_cb_) {
+    LOG(WARNING) << "Overlapping reads are not supported";
+    return;
+  }
+
   read_cb_ = base::BindPostTaskToCurrentDefault(std::move(read_cb));
   state_ = kPendingDemuxerRead;
   demuxer_stream_->Read(