d3d11: fix a crash in CommandRecordingContext::Destroy()

Bug: chromium:326044506
Change-Id: Ia06ee17b29a7bd5defdcdbd84616a39e371fbe09
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/175643
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Auto-Submit: Peng Huang <penghuang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/native/d3d11/CommandRecordingContextD3D11.cpp b/src/dawn/native/d3d11/CommandRecordingContextD3D11.cpp
index d062143..5fcc396 100644
--- a/src/dawn/native/d3d11/CommandRecordingContextD3D11.cpp
+++ b/src/dawn/native/d3d11/CommandRecordingContextD3D11.cpp
@@ -213,6 +213,11 @@
 }
 
 void CommandRecordingContext::Destroy() {
+    // mDevice could be null due to failure of initialization.
+    if (!mDevice) {
+        return;
+    }
+
     DAWN_ASSERT(mDevice->IsLockedByCurrentThreadIfNeeded());
     mIsOpen = false;
     mUniformBuffer = nullptr;
diff --git a/src/dawn/native/d3d11/QueueD3D11.cpp b/src/dawn/native/d3d11/QueueD3D11.cpp
index 5469cc7..5690978 100644
--- a/src/dawn/native/d3d11/QueueD3D11.cpp
+++ b/src/dawn/native/d3d11/QueueD3D11.cpp
@@ -66,9 +66,11 @@
 MaybeError Queue::InitializePendingContext() {
     // Initialize mPendingCommands. After this, calls to the use the command context
     // are thread safe.
-    CommandRecordingContext commands;
-    DAWN_TRY(commands.Initialize(ToBackend(GetDevice())));
-    mPendingCommands.Use([&](auto pendingCommands) { *pendingCommands = std::move(commands); });
+    CommandRecordingContext commandContext;
+    DAWN_TRY(commandContext.Initialize(ToBackend(GetDevice())));
+
+    mPendingCommands.Use(
+        [&](auto pendingCommandContext) { *pendingCommandContext = std::move(commandContext); });
 
     // Configure the command context's uniform buffer. This is used to emulate builtins.
     // Creating the buffer is done outside of Initialize because it requires mPendingCommands
@@ -77,6 +79,7 @@
     DAWN_TRY_ASSIGN(uniformBuffer,
                     CommandRecordingContext::CreateInternalUniformBuffer(GetDevice()));
     mPendingCommands->SetInternalUniformBuffer(std::move(uniformBuffer));
+
     return {};
 }