Merge pull request #6156 from lioncash/lock-discard

kernel: Mark lock helper classes as [[nodiscard]]
This commit is contained in:
bunnei 2021-04-09 21:42:26 -07:00 committed by GitHub
commit c6d2af16b5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 9 deletions

View file

@ -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();
}; };

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();