lockstep_scheduler: fix return value, remove errno

The API of cond_timedwait was wrong. It used return -1 and set errno
instead of returning the error as specified for pthread_cond_timedwait
which it tries to mock.
This commit is contained in:
Julian Oes 2019-01-01 19:59:04 +01:00 committed by Lorenz Meier
parent 0d0a556847
commit 23653f9f39
2 changed files with 5 additions and 9 deletions

View File

@ -57,8 +57,7 @@ int LockstepScheduler::cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *loc
// The time has already passed.
if (time_us <= time_us_) {
errno = ETIMEDOUT;
return -1;
return ETIMEDOUT;
}
new_timed_wait = std::make_shared<TimedWait>();
@ -80,8 +79,7 @@ int LockstepScheduler::cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *loc
std::lock_guard<std::mutex> lock_timed_waits(timed_waits_mutex_);
if (result == 0 && new_timed_wait->timeout) {
errno = ETIMEDOUT;
result = -1;
result = ETIMEDOUT;
}
new_timed_wait->done = true;
@ -104,9 +102,8 @@ int LockstepScheduler::usleep_until(uint64_t time_us)
int result = cond_timedwait(&cond, &lock, time_us);
if (result == -1 && errno == ETIMEDOUT) {
if (result == ETIMEDOUT) {
// This is expected because we never notified to the condition.
errno = 0;
result = 0;
}

View File

@ -34,8 +34,7 @@ void test_condition_timing_out()
// Use a thread to wait for condition while we already have the lock.
// This ensures the synchronization happens in the right order.
std::thread thread([&ls, &cond, &lock, &should_have_timed_out]() {
assert(ls.cond_timedwait(&cond, &lock, some_time_us + 1000) == -1);
assert(errno == ETIMEDOUT);
assert(ls.cond_timedwait(&cond, &lock, some_time_us + 1000) == ETIMEDOUT);
assert(should_have_timed_out);
// It should be re-locked afterwards, so we should be able to unlock it.
assert(pthread_mutex_unlock(&lock) == 0);
@ -139,7 +138,7 @@ public:
else if (timeout_reached) {
is_done_ = true;
thread_->join();
assert(result_ == -1);
assert(result_ == ETIMEDOUT);
}
}
private: