Merge branch 'main' into user_and_settings

This commit is contained in:
georgemoralis 2026-02-17 00:12:56 +02:00 committed by GitHub
commit fb4ca27022
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 10 additions and 5 deletions

View File

@ -55,7 +55,7 @@ std::filesystem::path MntPoints::GetHostPath(std::string_view path, bool* is_rea
if (path.length() > 255) if (path.length() > 255)
return ""; return "";
const MntPair* mount = GetMount(corrected_path); const std::optional<MntPair> mount = GetMount(corrected_path);
if (!mount) { if (!mount) {
return ""; return "";
} }

View File

@ -5,6 +5,7 @@
#include <atomic> #include <atomic>
#include <mutex> #include <mutex>
#include <optional>
#include <string> #include <string>
#include <vector> #include <vector>
#include <tsl/robin_map.h> #include <tsl/robin_map.h>
@ -58,14 +59,17 @@ public:
return it == m_mnt_pairs.end() ? nullptr : &*it; return it == m_mnt_pairs.end() ? nullptr : &*it;
} }
const MntPair* GetMount(const std::string& guest_path) { const std::optional<MntPair> GetMount(const std::string& guest_path) {
std::scoped_lock lock{m_mutex}; std::scoped_lock lock{m_mutex};
const auto it = std::ranges::find_if(m_mnt_pairs, [&](const auto& mount) { const auto it = std::ranges::find_if(m_mnt_pairs, [&](const auto& mount) {
// When doing starts-with check, add a trailing slash to make sure we don't match // When doing starts-with check, add a trailing slash to make sure we don't match
// against only part of the mount path. // against only part of the mount path.
return guest_path == mount.mount || guest_path.starts_with(mount.mount + "/"); return guest_path == mount.mount || guest_path.starts_with(mount.mount + "/");
}); });
return it == m_mnt_pairs.end() ? nullptr : &*it; if (it == m_mnt_pairs.end()) {
return std::nullopt;
}
return *it;
} }
private: private:

View File

@ -108,7 +108,7 @@ SaveInstance::SaveInstance(int slot_num, Libraries::UserService::OrbisUserServic
mount_point = "/savedata" + std::to_string(slot_num); mount_point = "/savedata" + std::to_string(slot_num);
this->exists = fs::exists(param_sfo_path); this->exists = fs::exists(param_sfo_path);
this->mounted = g_mnt->GetMount(mount_point) != nullptr; this->mounted = g_mnt->GetMount(mount_point) != std::nullopt;
} }
SaveInstance::~SaveInstance() { SaveInstance::~SaveInstance() {

View File

@ -225,7 +225,7 @@ bool VideoOutDriver::SubmitFlip(VideoOutPort* port, s32 index, s64 flip_arg,
bool is_eop /*= false*/) { bool is_eop /*= false*/) {
{ {
std::unique_lock lock{port->port_mutex}; std::unique_lock lock{port->port_mutex};
if (index != -1 && port->flip_status.flip_pending_num >= port->NumRegisteredBuffers()) { if (index != -1 && port->flip_status.flip_pending_num > 16) {
LOG_ERROR(Lib_VideoOut, "Flip queue is full"); LOG_ERROR(Lib_VideoOut, "Flip queue is full");
return false; return false;
} }
@ -253,6 +253,7 @@ void VideoOutDriver::SubmitFlipInternal(VideoOutPort* port, s32 index, s64 flip_
frame = presenter->PrepareBlankFrame(false); frame = presenter->PrepareBlankFrame(false);
} else { } else {
const auto& buffer = port->buffer_slots[index]; const auto& buffer = port->buffer_slots[index];
ASSERT_MSG(buffer.group_index >= 0, "Trying to flip an unregistered buffer!");
const auto& group = port->groups[buffer.group_index]; const auto& group = port->groups[buffer.group_index];
frame = presenter->PrepareFrame(group, buffer.address_left); frame = presenter->PrepareFrame(group, buffer.address_left);
} }