mirror of
https://github.com/godotengine/godot
synced 2024-09-05 09:58:33 +00:00
Merge pull request #72168 from RandomShaper/sensible_lock_return
Booleanize various sync primitives' wait & locking methods
This commit is contained in:
commit
f0e3c3f4c3
|
@ -1105,8 +1105,8 @@ void Semaphore::wait() {
|
||||||
semaphore.wait();
|
semaphore.wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
Error Semaphore::try_wait() {
|
bool Semaphore::try_wait() {
|
||||||
return semaphore.try_wait() ? OK : ERR_BUSY;
|
return semaphore.try_wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Semaphore::post() {
|
void Semaphore::post() {
|
||||||
|
@ -1125,7 +1125,7 @@ void Mutex::lock() {
|
||||||
mutex.lock();
|
mutex.lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
Error Mutex::try_lock() {
|
bool Mutex::try_lock() {
|
||||||
return mutex.try_lock();
|
return mutex.try_lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -361,7 +361,7 @@ class Mutex : public RefCounted {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void lock();
|
void lock();
|
||||||
Error try_lock();
|
bool try_lock();
|
||||||
void unlock();
|
void unlock();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -373,7 +373,7 @@ class Semaphore : public RefCounted {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void wait();
|
void wait();
|
||||||
Error try_wait();
|
bool try_wait();
|
||||||
void post();
|
void post();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -780,7 +780,7 @@ private:
|
||||||
if (p_thread_safe) {
|
if (p_thread_safe) {
|
||||||
_mutex = p_mutex;
|
_mutex = p_mutex;
|
||||||
|
|
||||||
if (_mutex->try_lock() != OK) {
|
if (!_mutex->try_lock()) {
|
||||||
WARN_PRINT("Info : multithread BVH access detected (benign)");
|
WARN_PRINT("Info : multithread BVH access detected (benign)");
|
||||||
_mutex->lock();
|
_mutex->lock();
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#ifndef MUTEX_H
|
#ifndef MUTEX_H
|
||||||
#define MUTEX_H
|
#define MUTEX_H
|
||||||
|
|
||||||
#include "core/error/error_list.h"
|
|
||||||
#include "core/typedefs.h"
|
#include "core/typedefs.h"
|
||||||
|
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
@ -49,8 +48,8 @@ public:
|
||||||
mutex.unlock();
|
mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
_ALWAYS_INLINE_ Error try_lock() const {
|
_ALWAYS_INLINE_ bool try_lock() const {
|
||||||
return mutex.try_lock() ? OK : ERR_BUSY;
|
return mutex.try_lock();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,6 @@
|
||||||
#ifndef RW_LOCK_H
|
#ifndef RW_LOCK_H
|
||||||
#define RW_LOCK_H
|
#define RW_LOCK_H
|
||||||
|
|
||||||
#include "core/error/error_list.h"
|
|
||||||
|
|
||||||
#include <shared_mutex>
|
#include <shared_mutex>
|
||||||
|
|
||||||
class RWLock {
|
class RWLock {
|
||||||
|
@ -49,9 +47,9 @@ public:
|
||||||
mutex.unlock_shared();
|
mutex.unlock_shared();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attempt to lock the rwlock, OK on success, ERR_BUSY means it can't lock.
|
// Attempt to lock the RWLock for reading. True on success, false means it can't lock.
|
||||||
Error read_try_lock() const {
|
bool read_try_lock() const {
|
||||||
return mutex.try_lock_shared() ? OK : ERR_BUSY;
|
return mutex.try_lock_shared();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lock the rwlock, block if locked by someone else
|
// Lock the rwlock, block if locked by someone else
|
||||||
|
@ -64,9 +62,9 @@ public:
|
||||||
mutex.unlock();
|
mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attempt to lock the rwlock, OK on success, ERR_BUSY means it can't lock.
|
// Attempt to lock the RWLock for writing. True on success, false means it can't lock.
|
||||||
Error write_try_lock() {
|
bool write_try_lock() {
|
||||||
return mutex.try_lock() ? OK : ERR_BUSY;
|
return mutex.try_lock();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="try_lock">
|
<method name="try_lock">
|
||||||
<return type="int" enum="Error" />
|
<return type="bool" />
|
||||||
<description>
|
<description>
|
||||||
Tries locking this [Mutex], but does not block. Returns [constant OK] on success, [constant ERR_BUSY] otherwise.
|
Tries locking this [Mutex], but does not block. Returns [code]true[/code] on success, [code]false[/code] otherwise.
|
||||||
[b]Note:[/b] This function returns [constant OK] if the thread already has ownership of the mutex.
|
[b]Note:[/b] This function returns [constant OK] if the thread already has ownership of the mutex.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
|
|
@ -17,9 +17,9 @@
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="try_wait">
|
<method name="try_wait">
|
||||||
<return type="int" enum="Error" />
|
<return type="bool" />
|
||||||
<description>
|
<description>
|
||||||
Like [method wait], but won't block, so if the value is zero, fails immediately and returns [constant ERR_BUSY]. If non-zero, it returns [constant OK] to report success.
|
Like [method wait], but won't block, so if the value is zero, fails immediately and returns [code]false[/code]. If non-zero, it returns [code]true[/code] to report success.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="wait">
|
<method name="wait">
|
||||||
|
|
|
@ -283,7 +283,7 @@ void AudioDriverCoreAudio::unlock() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioDriverCoreAudio::try_lock() {
|
bool AudioDriverCoreAudio::try_lock() {
|
||||||
return mutex.try_lock() == OK;
|
return mutex.try_lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioDriverCoreAudio::finish() {
|
void AudioDriverCoreAudio::finish() {
|
||||||
|
|
|
@ -44,7 +44,7 @@ void AudioDriverOpenSL::_buffer_callback(
|
||||||
if (pause) {
|
if (pause) {
|
||||||
mix = false;
|
mix = false;
|
||||||
} else {
|
} else {
|
||||||
mix = mutex.try_lock() == OK;
|
mix = mutex.try_lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mix) {
|
if (mix) {
|
||||||
|
|
Loading…
Reference in a new issue