aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/service/vi/vi.cpp
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2024-01-17 22:03:40 -0500
committerLiam <byteslice@airmail.cc>2024-01-17 22:03:40 -0500
commitc6dc206cd649796ff9fe27f4018ee8a0ec2c652b (patch)
treeef5c985bcc765c02da9e443140de55228ed4134d /src/core/hle/service/vi/vi.cpp
parent5f9a3c23dbb383dcba611848cbbb8f6b56386142 (diff)
vi: check layer state before opening or closing
Diffstat (limited to 'src/core/hle/service/vi/vi.cpp')
-rw-r--r--src/core/hle/service/vi/vi.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp
index 39d5be90d0..bfcc27ddc3 100644
--- a/src/core/hle/service/vi/vi.cpp
+++ b/src/core/hle/service/vi/vi.cpp
@@ -719,7 +719,12 @@ private:
return;
}
- nvnflinger.OpenLayer(layer_id);
+ if (!nvnflinger.OpenLayer(layer_id)) {
+ LOG_WARNING(Service_VI, "Tried to open layer which was already open");
+ IPC::ResponseBuilder rb{ctx, 2};
+ rb.Push(ResultOperationFailed);
+ return;
+ }
android::OutputParcel parcel;
parcel.WriteInterface(NativeWindow{*buffer_queue_id});
@@ -737,7 +742,12 @@ private:
LOG_DEBUG(Service_VI, "called. layer_id=0x{:016X}", layer_id);
- nvnflinger.CloseLayer(layer_id);
+ if (!nvnflinger.CloseLayer(layer_id)) {
+ LOG_WARNING(Service_VI, "Tried to close layer which was not open");
+ IPC::ResponseBuilder rb{ctx, 2};
+ rb.Push(ResultOperationFailed);
+ return;
+ }
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);