dawn_wire: Fix leak in Server::DoDevicePopErrorScope

Also fixes a uint64_t -> uint32_t narrowing conversion.

Bug: chromium:1001045, dawn:153
Change-Id: I0f94d201884071325c7c5bb40a8c9c67c066e251
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10980
Commit-Queue: Corentin Wallez <cwallez@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 efbb467..5e9c8b6 100644
--- a/src/dawn_wire/server/Server.h
+++ b/src/dawn_wire/server/Server.h
@@ -36,7 +36,7 @@
         Server* server;
         // TODO(enga): ObjectHandle device;
         // when the wire supports multiple devices.
-        uint32_t requestSerial;
+        uint64_t requestSerial;
     };
 
     struct FenceCompletionUserdata {
diff --git a/src/dawn_wire/server/ServerDevice.cpp b/src/dawn_wire/server/ServerDevice.cpp
index 4e86d3e..8713b57 100644
--- a/src/dawn_wire/server/ServerDevice.cpp
+++ b/src/dawn_wire/server/ServerDevice.cpp
@@ -36,7 +36,11 @@
         userdata->server = this;
         userdata->requestSerial = requestSerial;
 
-        return mProcs.devicePopErrorScope(cDevice, ForwardPopErrorScope, userdata);
+        bool success = mProcs.devicePopErrorScope(cDevice, ForwardPopErrorScope, userdata);
+        if (!success) {
+            delete userdata;
+        }
+        return success;
     }
 
     // static