#include "port/port.h"
#include "rocksdb/env.h"
+#include "util/mock_time_env.h"
#include "util/mutexlock.h"
namespace rocksdb {
env_(env),
delay_us_(delay_us),
initial_delay_us_(initial_delay_us),
+ mutex_(env),
cond_var_(&mutex_),
running_(true),
#ifndef NDEBUG
void cancel() {
{
- MutexLock l(&mutex_);
+ InstrumentedMutexLock l(&mutex_);
if (!running_) {
return;
}
thread_.join();
}
+ bool IsRunning() { return running_; }
+
~RepeatableThread() { cancel(); }
#ifndef NDEBUG
//
// Note: only support one caller of this method.
void TEST_WaitForRun(std::function<void()> callback = nullptr) {
- MutexLock l(&mutex_);
+ InstrumentedMutexLock l(&mutex_);
while (!waiting_) {
cond_var_.Wait();
}
private:
bool wait(uint64_t delay) {
- MutexLock l(&mutex_);
+ InstrumentedMutexLock l(&mutex_);
if (running_ && delay > 0) {
uint64_t wait_until = env_->NowMicros() + delay;
#ifndef NDEBUG
function_();
#ifndef NDEBUG
{
- MutexLock l(&mutex_);
+ InstrumentedMutexLock l(&mutex_);
run_count_++;
cond_var_.SignalAll();
}
// Mutex lock should be held when accessing running_, waiting_
// and run_count_.
- port::Mutex mutex_;
- port::CondVar cond_var_;
+ InstrumentedMutex mutex_;
+ InstrumentedCondVar cond_var_;
bool running_;
#ifndef NDEBUG
// RepeatableThread waiting for timeout.