Fix leaking FenceCompletionUserdata in the wire

This was being leaked if the completion status was not a success.

Bug: chromium:939396
Change-Id: Ia09bcef935697b354e6e3da3c4a3d308545fec53
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/5840
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_wire/server/Server.h b/src/dawn_wire/server/Server.h
index 5f4dbbe..ac622ea 100644
--- a/src/dawn_wire/server/Server.h
+++ b/src/dawn_wire/server/Server.h
@@ -68,7 +68,8 @@
                                            void* ptr,
                                            uint32_t dataLength,
                                            MapUserdata* userdata);
-        void OnFenceCompletedValueUpdated(FenceCompletionUserdata* userdata);
+        void OnFenceCompletedValueUpdated(DawnFenceCompletionStatus status,
+                                          FenceCompletionUserdata* userdata);
 
 #include "dawn_wire/server/ServerPrototypes_autogen.inl"
 
diff --git a/src/dawn_wire/server/ServerFence.cpp b/src/dawn_wire/server/ServerFence.cpp
index 96a78c6..b52d3bd 100644
--- a/src/dawn_wire/server/ServerFence.cpp
+++ b/src/dawn_wire/server/ServerFence.cpp
@@ -21,14 +21,17 @@
     void Server::ForwardFenceCompletedValue(DawnFenceCompletionStatus status,
                                             DawnCallbackUserdata userdata) {
         auto data = reinterpret_cast<FenceCompletionUserdata*>(static_cast<uintptr_t>(userdata));
-        if (status == DAWN_FENCE_COMPLETION_STATUS_SUCCESS) {
-            data->server->OnFenceCompletedValueUpdated(data);
-        }
+        data->server->OnFenceCompletedValueUpdated(status, data);
     }
 
-    void Server::OnFenceCompletedValueUpdated(FenceCompletionUserdata* userdata) {
+    void Server::OnFenceCompletedValueUpdated(DawnFenceCompletionStatus status,
+                                              FenceCompletionUserdata* userdata) {
         std::unique_ptr<FenceCompletionUserdata> data(userdata);
 
+        if (status != DAWN_FENCE_COMPLETION_STATUS_SUCCESS) {
+            return;
+        }
+
         ReturnFenceUpdateCompletedValueCmd cmd;
         cmd.fence = data->fence;
         cmd.value = data->value;