Fix MapAsyncAndWait use-after-free Fixes an issue where the callback registered in DawnTestBase::MapAsyncAndWait could cause an access violation during global test teardown due to trying to run a callback that was allocated on the stack and had already gone out of scope. This only occurred when instance.WaitAny() timed out, which would cause the callback to still be around until the instance got destroyed and ensured that all pending callbacks were complete. Now, the actual callback to run is provided via a shared_ptr and the lambda provided to buffer.MapAsync() checks if it is null before running it. After instance.WaitAny() returns but before we make any asserts, we set the pointer to null, preventing the soon-to-be-dangling pointer from being used in the future. This is meant as a temporary workaround, as WaitAny() should always run the provided callback. This can be reverted once the underlying issue is fixed. Bug: 459864803, 460743383 Change-Id: I5384e74ff6ab9da6104b07e6d9d235bf5d4b40c2 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/273736 Commit-Queue: Brian Sheedy <bsheedy@google.com> Reviewed-by: Loko Kung <lokokung@google.com> Auto-Submit: Brian Sheedy <bsheedy@google.com> Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Dawn is an open-source and cross-platform implementation of the WebGPU standard. More precisely it implements webgpu.h that is a one-to-one mapping with the WebGPU IDL. Dawn is meant to be integrated as part of a larger system and is the underlying implementation of WebGPU in Chromium.
Dawn provides several WebGPU building blocks:
webgpu.h version that Dawn implements.webgpu.h.Helpful links:
Developer documentation:
User documentation: (TODO, figure out what overlaps with the webgpu.h docs)
BSD 3-Clause License, please see LICENSE.
This is not an officially supported Google product.