fix scoped_refptr

This commit is contained in:
tqcq
2024-02-25 19:04:21 +08:00
parent e3fd80811a
commit d4deb0ae03
6 changed files with 737 additions and 11 deletions

View File

@@ -3,6 +3,21 @@
#include <iostream>
namespace sled {
class ScopedAtomicWaiter {
public:
ScopedAtomicWaiter(std::atomic_bool &flag) : flag_(flag)
{
bool old = flag_.load();
while (!flag_.compare_exchange_weak(old, false)) { continue; }
}
~ScopedAtomicWaiter() { flag_.store(true); }
private:
std::atomic_bool &flag_;
};
void
Log(LogLevel level,
const char *tag,
@@ -12,6 +27,8 @@ Log(LogLevel level,
const char *func_name,
...)
{
static std::atomic_bool allow(true);
ScopedAtomicWaiter waiter(allow);
int len = file_name ? strlen(file_name) : 0;
while (len > 0 && file_name[len - 1] != '/') { len--; }

View File

@@ -30,9 +30,9 @@ Event::Reset()
bool
Event::Wait(TimeDelta give_up_after, TimeDelta warn_after)
{
MutexLock lock(&mutex_);
MutexLock guard(&mutex_);
bool wait_success =
cv_.WaitFor(lock, give_up_after, [&] { return event_status_; });
cv_.WaitFor(guard, give_up_after, [&] { return event_status_; });
if (!wait_success) { return false; }
if (!is_manual_reset_) { event_status_ = false; }