diff options
-rw-r--r-- | chromium/third_party/blink/renderer/modules/webcodecs/codec_logger.cc | 6 | ||||
-rw-r--r-- | chromium/third_party/blink/renderer/modules/webcodecs/codec_logger.h | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/modules/webcodecs/codec_logger.cc b/chromium/third_party/blink/renderer/modules/webcodecs/codec_logger.cc index 257f84f195b..32698e3778c 100644 --- a/chromium/third_party/blink/renderer/modules/webcodecs/codec_logger.cc +++ b/chromium/third_party/blink/renderer/modules/webcodecs/codec_logger.cc @@ -37,6 +37,8 @@ CodecLogger::CodecLogger( // This allows us to destroy |parent_media_log_| and stop logging, // without causing problems to |media_log_| users. media_log_ = parent_media_log_->Clone(); + + task_runner_ = task_runner; } DOMException* CodecLogger::MakeException(std::string error_msg, @@ -65,6 +67,10 @@ DOMException* CodecLogger::MakeException(std::string error_msg, CodecLogger::~CodecLogger() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // media logs must be posted for destruction, since they can cause the + // garbage collector to trigger an immediate cleanup and delete the owning + // instance of |CodecLogger|. + task_runner_->DeleteSoon(FROM_HERE, std::move(parent_media_log_)); } void CodecLogger::Neuter() { diff --git a/chromium/third_party/blink/renderer/modules/webcodecs/codec_logger.h b/chromium/third_party/blink/renderer/modules/webcodecs/codec_logger.h index 0329c6e6ef9..843b7b727cf 100644 --- a/chromium/third_party/blink/renderer/modules/webcodecs/codec_logger.h +++ b/chromium/third_party/blink/renderer/modules/webcodecs/codec_logger.h @@ -74,6 +74,9 @@ class MODULES_EXPORT CodecLogger final { // can be safely accessed, and whose raw pointer can be given callbacks. std::unique_ptr<media::MediaLog> media_log_; + // Keep task runner around for posting the media log to upon destruction. + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; + SEQUENCE_CHECKER(sequence_checker_); }; |