[android] Do not use lock-free types on Android

They are not supported by ARMv5 and the compiler is generating
bogus code. std::atomic might be implemented lock-free for some
types, but we are going to introduce a naive polyfill to make
sure that doesn't happen on ARMv5 (only).
This commit is contained in:
Thiago Marcos P. Santos
2016-06-06 16:18:46 +03:00
parent c3cbe67c01
commit 874fa41c12

View File

@@ -12,7 +12,7 @@ namespace util {
class AsyncTask::Impl : public RunLoop::Impl::Runnable {
public:
Impl(std::function<void()>&& fn)
: task(std::move(fn)) {
: queued(true), task(std::move(fn)) {
loop->initRunnable(this);
}
@@ -21,7 +21,8 @@ public:
}
void maySend() {
if (!queued.test_and_set()) {
if (queued) {
queued = false;
loop->addRunnable(this);
}
}
@@ -32,7 +33,7 @@ public:
void runTask() override {
loop->removeRunnable(this);
queued.clear();
queued = true;
task();
}
@@ -42,7 +43,9 @@ private:
RunLoop::Impl* loop = reinterpret_cast<RunLoop::Impl*>(RunLoop::getLoopHandle());
std::atomic_flag queued = ATOMIC_FLAG_INIT;
// TODO: Use std::atomic_flag if we ever drop
// support for ARMv5
std::atomic<bool> queued;
std::function<void()> task;
};