diff options
author | Liam <byteslice@airmail.cc> | 2023-10-30 04:38:24 +0100 |
---|---|---|
committer | Liam <byteslice@airmail.cc> | 2023-10-30 04:38:24 +0100 |
commit | a872030a351cc50293e6bf0793fe70041cee0098 (patch) | |
tree | 5e88267716394ccd2d15379a02e69d74bd371916 /src/core/hle/service/nvnflinger/buffer_queue_consumer.cpp | |
parent | Merge pull request #11911 from german77/leak_event (diff) | |
download | yuzu-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.cpp | 19 |
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"); |