Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make sure hunspell file is not destroyed in UI thread
In this code: base::PostTaskAndReplyWithResult( task_runner_.get(), FROM_HERE, base::BindOnce(&InitializeDictionaryLocation, language_), base::BindOnce(&InitializeDictionaryLocationComplete, weak_ptr_factory_.GetWeakPtr())); When |SpellcheckHunspellDictionary| is destroyed before |InitializeDictionaryLocation| is finished, the |InitializeDictionaryLocationComplete| method would not be called, and the returned |DictionaryFile| will be destroyed on UI thread, with its |base::File| member. It would then result in a DCHECK like this: [904:0518/140618.257:FATAL:thread_restrictions.cc(78)] Check failed: !g_blocking_disallowed.Get().Get(). Function marked as blocking was called from a scope that disallows blocking! If this task is running inside the ThreadPool, it needs to have MayBlock() in its TaskTraits. Otherwise, consider making this blocking work asynchronous or, as a last resort, you may use ScopedAllowBlocking (see its documentation for best practices). g_blocking_disallowed currently set to true by base::debug::CollectStackTrace [0x00007FF6805435C2+18] (o:\base\debug\stack_trace_win.cc:284) base::debug::StackTrace::StackTrace [0x00007FF68049BCC2+18] (o:\base\debug\stack_trace.cc:203) logging::LogMessage::~LogMessage [0x00007FF6804AF447+215] (o:\base\logging.cc:605) logging::LogMessage::~LogMessage [0x00007FF6804B0190+16] (o:\base\logging.cc:598) base::internal::AssertBlockingAllowed [0x00007FF680514B33+163] (o:\base\threading\thread_restrictions.cc:85) base::ScopedBlockingCall::ScopedBlockingCall [0x00007FF6805103EB+155] (o:\base\threading\scoped_blocking_call.cc:40) base::File::Close [0x00007FF680549E4B+139] (o:\base\files\file_win.cc:42) SpellcheckHunspellDictionary::DictionaryFile::~DictionaryFile [0x00007FF680071DDE+194] (o:\chrome\browser\spellchecker\spellcheck_hunspell_dictionary.cc:102) base::OnceCallback<void (SpellcheckHunspellDictionary::DictionaryFile)>::Run [0x00007FF6800749BF+75] (o:\base\callback.h:100) To avoid have |base::File| destroyed on UI thread, we should make sure the file is closed in the destructor of |DictionaryFile|. Bug: 1085227 Change-Id: I1dba3b36661ec7968b22cf6d7835e41a81a313cc Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2206199 Reviewed-by: Rouslan Solomakhin <[email protected]> Reviewed-by: Sami Kyöstilä <[email protected]> Reviewed-by: Guillaume Jenkins <[email protected]> Commit-Queue: Rouslan Solomakhin <[email protected]> Cr-Commit-Position: refs/heads/master@{#771037}
- Loading branch information