early-access version 1577

This commit is contained in:
pineappleEA 2021-04-10 07:31:38 +02:00
parent a20c9bc240
commit 7cfa731bca
4 changed files with 13 additions and 10 deletions

View file

@ -1,7 +1,7 @@
yuzu emulator early access yuzu emulator early access
============= =============
This is the source code for early-access 1576. This is the source code for early-access 1577.
## Legal Notice ## Legal Notice

View file

@ -195,9 +195,9 @@ private:
KSpinLock guard{}; KSpinLock guard{};
}; };
class KScopedSchedulerLock : KScopedLock<GlobalSchedulerContext::LockType> { class [[nodiscard]] KScopedSchedulerLock : KScopedLock<GlobalSchedulerContext::LockType> {
public: public:
explicit KScopedSchedulerLock(KernelCore& kernel); explicit KScopedSchedulerLock(KernelCore & kernel);
~KScopedSchedulerLock(); ~KScopedSchedulerLock();
}; };

View file

@ -20,19 +20,22 @@ concept KLockable = !std::is_reference_v<T> && requires(T & t) {
}; };
template <typename T> template <typename T>
requires KLockable<T> class KScopedLock { requires KLockable<T> class [[nodiscard]] KScopedLock {
public: public:
explicit KScopedLock(T* l) : lock_ptr(l) { explicit KScopedLock(T * l) : lock_ptr(l) {
this->lock_ptr->Lock(); this->lock_ptr->Lock();
} }
explicit KScopedLock(T& l) : KScopedLock(std::addressof(l)) { /* ... */ explicit KScopedLock(T & l) : KScopedLock(std::addressof(l)) {}
}
~KScopedLock() { ~KScopedLock() {
this->lock_ptr->Unlock(); this->lock_ptr->Unlock();
} }
KScopedLock(const KScopedLock&) = delete; KScopedLock(const KScopedLock&) = delete;
KScopedLock(KScopedLock&&) = delete; KScopedLock& operator=(const KScopedLock&) = delete;
KScopedLock(KScopedLock &&) = delete;
KScopedLock& operator=(KScopedLock&&) = delete;
private: private:
T* lock_ptr; T* lock_ptr;

View file

@ -15,9 +15,9 @@
namespace Kernel { namespace Kernel {
class KScopedSchedulerLockAndSleep { class [[nodiscard]] KScopedSchedulerLockAndSleep {
public: public:
explicit KScopedSchedulerLockAndSleep(KernelCore& kernel, KThread* t, s64 timeout) explicit KScopedSchedulerLockAndSleep(KernelCore & kernel, KThread * t, s64 timeout)
: kernel(kernel), thread(t), timeout_tick(timeout) { : kernel(kernel), thread(t), timeout_tick(timeout) {
// Lock the scheduler. // Lock the scheduler.
kernel.GlobalSchedulerContext().scheduler_lock.Lock(); kernel.GlobalSchedulerContext().scheduler_lock.Lock();