summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/nvnflinger/buffer_queue_consumer.cpp
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2023-10-30 04:38:24 +0100
committerLiam <byteslice@airmail.cc>2023-10-30 04:38:24 +0100
commita872030a351cc50293e6bf0793fe70041cee0098 (patch)
tree5e88267716394ccd2d15379a02e69d74bd371916 /src/core/hle/service/nvnflinger/buffer_queue_consumer.cpp
parentMerge pull request #11911 from german77/leak_event (diff)
downloadyuzu-a872030a351cc50293e6bf0793fe70041cee0098.tar
yuzu-a872030a351cc50293e6bf0793fe70041cee0098.tar.gz
yuzu-a872030a351cc50293e6bf0793fe70041cee0098.tar.bz2
yuzu-a872030a351cc50293e6bf0793fe70041cee0098.tar.lz
yuzu-a872030a351cc50293e6bf0793fe70041cee0098.tar.xz
yuzu-a872030a351cc50293e6bf0793fe70041cee0098.tar.zst
yuzu-a872030a351cc50293e6bf0793fe70041cee0098.zip
Diffstat (limited to 'src/core/hle/service/nvnflinger/buffer_queue_consumer.cpp')
-rw-r--r--src/core/hle/service/nvnflinger/buffer_queue_consumer.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/core/hle/service/nvnflinger/buffer_queue_consumer.cpp b/src/core/hle/service/nvnflinger/buffer_queue_consumer.cpp
index 51291539d..215c1ea80 100644
--- a/src/core/hle/service/nvnflinger/buffer_queue_consumer.cpp
+++ b/src/core/hle/service/nvnflinger/buffer_queue_consumer.cpp
@@ -175,6 +175,25 @@ Status BufferQueueConsumer::Connect(std::shared_ptr<IConsumerListener> consumer_
return Status::NoError;
}
+Status BufferQueueConsumer::Disconnect() {
+ LOG_DEBUG(Service_Nvnflinger, "called");
+
+ std::scoped_lock lock{core->mutex};
+
+ if (core->consumer_listener == nullptr) {
+ LOG_ERROR(Service_Nvnflinger, "no consumer is connected");
+ return Status::BadValue;
+ }
+
+ core->is_abandoned = true;
+ core->consumer_listener = nullptr;
+ core->queue.clear();
+ core->FreeAllBuffersLocked();
+ core->SignalDequeueCondition();
+
+ return Status::NoError;
+}
+
Status BufferQueueConsumer::GetReleasedBuffers(u64* out_slot_mask) {
if (out_slot_mask == nullptr) {
LOG_ERROR(Service_Nvnflinger, "out_slot_mask may not be nullptr");