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;