Skip to content

[Impeller] random crash in impeller::PipelineCacheVK::CreatePipeline #125522

@gaaclarke

Description

@gaaclarke

reproduction

This may be the same problem as #125519, just manifesting differently.

stacktrace

[ RUN      ] Play/SceneTest.FlutterLogo/Vulkan
libc++abi: terminating due to uncaught exception of type std::__1::system_error: mutex lock failed: Invalid argument
Process 30347 stopped
* thread #18, name = 'io.worker.2', stop reason = signal SIGABRT
    frame #0: 0x00000001a9f78724 libsystem_kernel.dylib`__pthread_kill + 8
libsystem_kernel.dylib`:
->  0x1a9f78724 <+8>:  b.lo   0x1a9f78744               ; <+40>
    0x1a9f78728 <+12>: pacibsp 
    0x1a9f7872c <+16>: stp    x29, x30, [sp, #-0x10]!
    0x1a9f78730 <+20>: mov    x29, sp
Target 0: (impeller_unittests) stopped.
(lldb) bt
* thread #18, name = 'io.worker.2', stop reason = signal SIGABRT
  * frame #0: 0x00000001a9f78724 libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x00000001a9fafc28 libsystem_pthread.dylib`pthread_kill + 288
    frame #2: 0x00000001a9ebdae8 libsystem_c.dylib`abort + 180
    frame #3: 0x00000001a9f68b84 libc++abi.dylib`abort_message + 132
    frame #4: 0x00000001a9f583b4 libc++abi.dylib`demangling_terminate_handler() + 320
    frame #5: 0x00000001a9c2f03c libobjc.A.dylib`_objc_terminate() + 160
    frame #6: 0x00000001a9f67f48 libc++abi.dylib`std::__terminate(void (*)()) + 16
    frame #7: 0x00000001a9f6ad34 libc++abi.dylib`__cxxabiv1::failed_throw(__cxxabiv1::__cxa_exception*) + 36
    frame #8: 0x00000001a9f6ace0 libc++abi.dylib`__cxa_throw + 140
    frame #9: 0x00000001a9ee68b4 libc++.1.dylib`std::__1::__throw_system_error(int, char const*) + 100
    frame #10: 0x00000001a9edaf88 libc++.1.dylib`std::__1::mutex::lock() + 40
    frame #11: 0x0000000123e7d844 libMoltenVK.dylib`MVKDevice::updateActivityPerformance(MVKPerformanceTracker&, unsigned long long, unsigned long long) + 56
    frame #12: 0x0000000123ec5264 libMoltenVK.dylib`MVKMetalCompiler::compile(std::__1::unique_lock<std::__1::mutex>&, void () block_pointer) + 700
    frame #13: 0x0000000123e8ba10 libMoltenVK.dylib`MVKRenderPipelineCompiler::newMTLRenderPipelineState(MTLRenderPipelineDescriptor*) + 108
    frame #14: 0x0000000123e8b958 libMoltenVK.dylib`MVKGraphicsPipeline::getOrCompilePipeline(MTLRenderPipelineDescriptor*, id<MTLRenderPipelineState>&) + 192
    frame #15: 0x0000000123e8b1b8 libMoltenVK.dylib`MVKGraphicsPipeline::initMTLRenderPipelineState(VkGraphicsPipelineCreateInfo const*, mvk::SPIRVTessReflectionData const&) + 1684
    frame #16: 0x0000000123e89b10 libMoltenVK.dylib`MVKGraphicsPipeline::MVKGraphicsPipeline(MVKDevice*, MVKPipelineCache*, MVKPipeline*, VkGraphicsPipelineCreateInfo const*) + 696
    frame #17: 0x0000000123e7cb1c libMoltenVK.dylib`VkResult MVKDevice::createPipelines<MVKGraphicsPipeline, VkGraphicsPipelineCreateInfo>(VkPipelineCache_T*, unsigned int, VkGraphicsPipelineCreateInfo const*, VkAllocationCallbacks const*, VkPipeline_T**) + 164
    frame #18: 0x0000000123e19f8c libMoltenVK.dylib`vkCreateGraphicsPipelines + 112
    frame #19: 0x0000000102b39d74 impeller_unittests`impeller::PipelineCacheVK::CreatePipeline(impeller::vk::GraphicsPipelineCreateInfo const&) [inlined] impeller::vk::ResultValue<impeller::vk::UniqueHandle<impeller::vk::Pipeline, impeller::vk::DispatchLoaderDynamic> > impeller::vk::Device::createGraphicsPipelineUnique<impeller::vk::DispatchLoaderDynamic>(this=0x000000015eae0768, pipelineCache=(m_pipelineCache = 0x000000015eae07e0), createInfo=0x00000001701ce448, allocator=Optional<const impeller::vk::AllocationCallbacks> @ 0x00000001701cd170, d=0x000000010449c800) const at vulkan_funcs.hpp:2383:23
    frame #20: 0x0000000102b39c80 impeller_unittests`impeller::PipelineCacheVK::CreatePipeline(this=0x000000015eae0758, info=0x00000001701ce448) at pipeline_cache_vk.cc:116:37
    frame #21: 0x0000000102b41e6c impeller_unittests`impeller::PipelineLibraryVK::CreatePipeline(this=0x000000015eadb1a0, desc=0x0000000127e61398) at pipeline_library_vk.cc:318:31
    frame #22: 0x0000000102b615a4 impeller_unittests`impeller::PipelineLibraryVK::GetPipeline(this=0x0000000127e61398)::$_0::operator()() const at pipeline_library_vk.cc:368:52
    frame #23: 0x0000000102b614a4 impeller_unittests`decltype(__f=0x0000000127e61398)::$_0&>()()) std::_LIBCPP_ABI_NAMESPACE::__invoke[abi:v15000]<impeller::PipelineLibraryVK::GetPipeline(impeller::PipelineDescriptor)::$_0&>(impeller::PipelineLibraryVK::GetPipeline(impeller::PipelineDescriptor)::$_0&) at invoke.h:403:23
    frame #24: 0x0000000102b613ec impeller_unittests`void std::_LIBCPP_ABI_NAMESPACE::__invoke_void_return_wrapper<void, true>::__call<impeller::PipelineLibraryVK::GetPipeline(__args=0x0000000127e61398)::$_0&>(impeller::PipelineLibraryVK::GetPipeline(impeller::PipelineDescriptor)::$_0&) at invoke.h:488:9
    frame #25: 0x0000000102b61394 impeller_unittests`std::_LIBCPP_ABI_NAMESPACE::__function::__alloc_func<impeller::PipelineLibraryVK::GetPipeline(impeller::PipelineDescriptor)::$_0, std::_LIBCPP_ABI_NAMESPACE::allocator<impeller::PipelineLibraryVK::GetPipeline(impeller::PipelineDescriptor)::$_0>, void ()>::operator(this=0x0000000127e61398)[abi:v15000]() at function.h:185:16
    frame #26: 0x0000000102b5eea4 impeller_unittests`std::_LIBCPP_ABI_NAMESPACE::__function::__func<impeller::PipelineLibraryVK::GetPipeline(impeller::PipelineDescriptor)::$_0, std::_LIBCPP_ABI_NAMESPACE::allocator<impeller::PipelineLibraryVK::GetPipeline(impeller::PipelineDescriptor)::$_0>, void ()>::operator(this=0x0000000127e61390)() at function.h:359:12
    frame #27: 0x0000000100380b08 impeller_unittests`std::_LIBCPP_ABI_NAMESPACE::__function::__value_func<void ()>::operator(this=0x00000001701cee68)[abi:v15000]() const at function.h:512:16
    frame #28: 0x0000000100380a18 impeller_unittests`std::_LIBCPP_ABI_NAMESPACE::function<void ()>::operator(this=0x00000001701cee68)() const at function.h:1187:12
    frame #29: 0x00000001005a1a90 impeller_unittests`fml::ConcurrentMessageLoop::WorkerMain(this=0x000000015eb18ae0) at concurrent_message_loop.cc:106:7
    frame #30: 0x00000001005aaed8 impeller_unittests`fml::ConcurrentMessageLoop::ConcurrentMessageLoop(this=0x0000000126bca9e8)::$_0::operator()() const at concurrent_message_loop.cc:26:7
    frame #31: 0x00000001005aadb4 impeller_unittests`decltype(__f=0x0000000126bca9e8)::$_0>()()) std::_LIBCPP_ABI_NAMESPACE::__invoke[abi:v15000]<fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0>(fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0&&) at invoke.h:403:23
    frame #32: 0x00000001005aad00 impeller_unittests`void std::_LIBCPP_ABI_NAMESPACE::__thread_execute[abi:v15000]<std::_LIBCPP_ABI_NAMESPACE::unique_ptr<std::_LIBCPP_ABI_NAMESPACE::__thread_struct, std::_LIBCPP_ABI_NAMESPACE::default_delete<std::_LIBCPP_ABI_NAMESPACE::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0>(__t=0x0000000126bca9e0, (null)=__tuple_indices<> @ 0x00000001701cef77)::$_0>&, std::_LIBCPP_ABI_NAMESPACE::__tuple_indices<>) at thread:284:5
    frame #33: 0x00000001005a9f2c impeller_unittests`void* std::_LIBCPP_ABI_NAMESPACE::__thread_proxy[abi:v15000]<std::_LIBCPP_ABI_NAMESPACE::tuple<std::_LIBCPP_ABI_NAMESPACE::unique_ptr<std::_LIBCPP_ABI_NAMESPACE::__thread_struct, std::_LIBCPP_ABI_NAMESPACE::default_delete<std::_LIBCPP_ABI_NAMESPACE::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(__vp=0x0000000126bca9e0) at thread:295:5
    frame #34: 0x00000001a9faffa8 libsystem_pthread.dylib`_pthread_start + 148

Metadata

Metadata

Assignees

Labels

P2Important issues not at the top of the work listc: flakeTests that sometimes, but not always, incorrectly passe: impellerImpeller rendering backend issues and features requestsengineflutter/engine related. See also e: labels.

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions