Services/VI: Dereferencing an uninitialized std::optional is undefined behavior.

Assert that it is not empty before using it in the DequeueBuffer wait callback.
This commit is contained in:
Subv 2018-11-30 16:06:49 -05:00
parent 4b950728fd
commit 583bd20f02

View File

@ -542,6 +542,8 @@ private:
// Repeat TransactParcel DequeueBuffer when a buffer is available // Repeat TransactParcel DequeueBuffer when a buffer is available
auto buffer_queue = nv_flinger->GetBufferQueue(id); auto buffer_queue = nv_flinger->GetBufferQueue(id);
std::optional<u32> slot = buffer_queue->DequeueBuffer(width, height); std::optional<u32> slot = buffer_queue->DequeueBuffer(width, height);
ASSERT_MSG(slot != std::nullopt, "Could not dequeue buffer.");
IGBPDequeueBufferResponseParcel response{*slot}; IGBPDequeueBufferResponseParcel response{*slot};
ctx.WriteBuffer(response.Serialize()); ctx.WriteBuffer(response.Serialize());
IPC::ResponseBuilder rb{ctx, 2}; IPC::ResponseBuilder rb{ctx, 2};