Commit bf5f12a5 authored by Max Kellermann's avatar Max Kellermann

Merge branch 'patch-4' of git://github.com/Wang-Yue/MPD

parents c457d8e4 86682176
...@@ -75,13 +75,13 @@ public: ...@@ -75,13 +75,13 @@ public:
} }
private: private:
bool timed_wait(PosixMutex &mutex, unsigned timeout_ms) noexcept { bool timed_wait(PosixMutex &mutex, uint_least32_t timeout_us) noexcept {
struct timeval now; struct timeval now;
gettimeofday(&now, nullptr); gettimeofday(&now, nullptr);
struct timespec ts; struct timespec ts;
ts.tv_sec = now.tv_sec + timeout_ms / 1000; ts.tv_sec = now.tv_sec + timeout_us / 1000000;
ts.tv_nsec = (now.tv_usec + (timeout_ms % 1000) * 1000) * 1000; ts.tv_nsec = (now.tv_usec + (timeout_us % 1000000)) * 1000;
// Keep tv_nsec < 1E9 to prevent return of EINVAL // Keep tv_nsec < 1E9 to prevent return of EINVAL
if (ts.tv_nsec >= 1000000000) { if (ts.tv_nsec >= 1000000000) {
ts.tv_nsec -= 1000000000; ts.tv_nsec -= 1000000000;
...@@ -94,13 +94,13 @@ private: ...@@ -94,13 +94,13 @@ private:
public: public:
bool timed_wait(PosixMutex &mutex, bool timed_wait(PosixMutex &mutex,
std::chrono::steady_clock::duration timeout) noexcept { std::chrono::steady_clock::duration timeout) noexcept {
auto timeout_ms = std::chrono::duration_cast<std::chrono::milliseconds>(timeout).count(); auto timeout_us = std::chrono::duration_cast<std::chrono::microseconds>(timeout).count();
if (timeout_ms < 0) if (timeout_us < 0)
timeout_ms = 0; timeout_us = 0;
else if (timeout_ms > std::numeric_limits<unsigned>::max()) else if (timeout_us > std::numeric_limits<uint_least32_t>::max())
timeout_ms = std::numeric_limits<unsigned>::max(); timeout_us = std::numeric_limits<uint_least32_t>::max();
return timed_wait(mutex, timeout_ms); return timed_wait(mutex, timeout_us);
} }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment