-
Notifications
You must be signed in to change notification settings - Fork 29.1k
Closed
flutter/engine
#26210Labels
P2Important issues not at the top of the work listImportant issues not at the top of the work listengineflutter/engine related. See also e: labels.flutter/engine related. See also e: labels.
Description
Happens on IO thread in linux when closing window that has animation in it.
The problem is that unref tasks are posted with 8ms delay (see ShellIOManager
constructor). When MessageLoop
quits, these tasks are not expired yet, and thus they are simply disposed without being run. When last task is disposed, the queue is unreffed with objects_
not being empty.
Stack Trace
raise (@raise:45)
abort (@abort:60)
fml::KillProcess() (/home/matej/Projects/flutter/engine/src/flutter/fml/logging.cc:143)
fml::LogMessage::~LogMessage() (/home/matej/Projects/flutter/engine/src/flutter/fml/logging.cc:130)
flutter::SkiaUnrefQueue::~SkiaUnrefQueue() (/home/matej/Projects/flutter/engine/src/flutter/flow/skia_gpu_object.cc:21)
fml::RefCountedThreadSafe<flutter::SkiaUnrefQueue>::Release() const (/home/matej/Projects/flutter/engine/src/flutter/fml/memory/ref_counted.h:73)
fml::RefPtr<flutter::SkiaUnrefQueue>::~RefPtr() (/home/matej/Projects/flutter/engine/src/flutter/fml/memory/ref_ptr.h:108)
flutter::SkiaUnrefQueue::Unref(SkRefCnt*)::$_0::~$_0() (/home/matej/Projects/flutter/engine/src/flutter/flow/skia_gpu_object.cc:30)
std::__1::__compressed_pair_elem<flutter::SkiaUnrefQueue::Unref(SkRefCnt*)::$_0, 0, false>::~__compressed_pair_elem() (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/memory:2133)
std::__1::__compressed_pair<flutter::SkiaUnrefQueue::Unref(SkRefCnt*)::$_0, std::__1::allocator<flutter::SkiaUnrefQueue::Unref(SkRefCnt*)::$_0> >::~__compressed_pair() (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/memory:2210)
std::__1::__function::__alloc_func<flutter::SkiaUnrefQueue::Unref(SkRefCnt*)::$_0, std::__1::allocator<flutter::SkiaUnrefQueue::Unref(SkRefCnt*)::$_0>, void ()>::destroy() (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/functional:1552)
std::__1::__function::__func<flutter::SkiaUnrefQueue::Unref(SkRefCnt*)::$_0, std::__1::allocator<flutter::SkiaUnrefQueue::Unref(SkRefCnt*)::$_0>, void ()>::destroy_deallocate() (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/functional:1699)
std::__1::__function::__value_func<void ()>::~__value_func() (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/functional:1821)
std::__1::function<void ()>::~function() (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/functional:2406)
fml::DelayedTask::~DelayedTask() (/home/matej/Projects/flutter/engine/src/flutter/fml/delayed_task.cc:20)
std::__1::allocator<fml::DelayedTask>::destroy(fml::DelayedTask*) (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/memory:1880)
void std::__1::allocator_traits<std::__1::allocator<fml::DelayedTask> >::__destroy<fml::DelayedTask>(std::__1::integral_constant<bool, true>, std::__1::allocator<fml::DelayedTask>&, fml::DelayedTask*) (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/memory:1742)
void std::__1::allocator_traits<std::__1::allocator<fml::DelayedTask> >::destroy<fml::DelayedTask>(std::__1::allocator<fml::DelayedTask>&, fml::DelayedTask*) (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/memory:1595)
std::__1::__deque_base<fml::DelayedTask, std::__1::allocator<fml::DelayedTask> >::clear() (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/deque:1179)
std::__1::deque<fml::DelayedTask, std::__1::allocator<fml::DelayedTask> >::clear() (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/deque:2874)
std::__1::deque<fml::DelayedTask, std::__1::allocator<fml::DelayedTask> >::__move_assign(std::__1::deque<fml::DelayedTask, std::__1::allocator<fml::DelayedTask> >&, std::__1::integral_constant<bool, true>) (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/deque:1632)
std::__1::deque<fml::DelayedTask, std::__1::allocator<fml::DelayedTask> >::operator=(std::__1::deque<fml::DelayedTask, std::__1::allocator<fml::DelayedTask> >&&) (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/deque:1609)
std::__1::priority_queue<fml::DelayedTask, std::__1::deque<fml::DelayedTask, std::__1::allocator<fml::DelayedTask> >, std::__1::greater<fml::DelayedTask> >::operator=(std::__1::priority_queue<fml::DelayedTask, std::__1::deque<fml::DelayedTask, std::__1::allocator<fml::DelayedTask> >, std::__1::greater<fml::DelayedTask> >&&) (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/queue:467)
fml::TaskSource::ShutDown() (/home/matej/Projects/flutter/engine/src/flutter/fml/task_source.cc:19)
fml::MessageLoopTaskQueues::DisposeTasks(fml::TaskQueueId) (/home/matej/Projects/flutter/engine/src/flutter/fml/message_loop_task_queues.cc:91)
fml::MessageLoopImpl::DoRun() (/home/matej/Projects/flutter/engine/src/flutter/fml/message_loop_impl.cc:112)
fml::MessageLoop::Run() (/home/matej/Projects/flutter/engine/src/flutter/fml/message_loop.cc:49)
fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()() const (/home/matej/Projects/flutter/engine/src/flutter/fml/thread.cc:35)
decltype(std::__1::forward<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fp)()) std::__1::__invoke<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0&&) (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/type_traits:3530)
void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>&, std::__1::__tuple_indices<>) (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/thread:341)
void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*) (/home/matej/Projects/flutter/engine/src/third_party/libcxx/include/thread:351)
start_thread (@start_thread:51)
__clone (@__clone:26)
The behavior to not drain the SkiaUnrefQueue
in destructor was introduced here.
/cc @jason-simmons /cc @chinmaygarde
Metadata
Metadata
Assignees
Labels
P2Important issues not at the top of the work listImportant issues not at the top of the work listengineflutter/engine related. See also e: labels.flutter/engine related. See also e: labels.