Browse Source
Merge pull request #6156 from lioncash/lock-discard
kernel: Mark lock helper classes as [[nodiscard]]
pull/15/merge
bunnei
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
12 additions and
9 deletions
-
src/core/hle/kernel/k_scheduler.h
-
src/core/hle/kernel/k_scoped_lock.h
-
src/core/hle/kernel/k_scoped_scheduler_lock_and_sleep.h
|
|
@ -198,9 +198,9 @@ private: |
|
|
Common::SpinLock guard{}; |
|
|
Common::SpinLock guard{}; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
class KScopedSchedulerLock : KScopedLock<GlobalSchedulerContext::LockType> { |
|
|
|
|
|
|
|
|
class [[nodiscard]] KScopedSchedulerLock : KScopedLock<GlobalSchedulerContext::LockType> { |
|
|
public: |
|
|
public: |
|
|
explicit KScopedSchedulerLock(KernelCore& kernel); |
|
|
|
|
|
|
|
|
explicit KScopedSchedulerLock(KernelCore & kernel); |
|
|
~KScopedSchedulerLock(); |
|
|
~KScopedSchedulerLock(); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
@ -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(); |
|
|
|