summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-03-08 09:29:44 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-03-08 10:28:01 -0800
commit8fee0f33c081d339a143306a0c82baacdac5a74c (patch)
tree77988df39646afa76159333ef362a9a29eccd595
parentaaf9e8256fa5f9d5cc9f4acfebf28b28d8c543e8 (diff)
downloadqtlocation-mapboxgl-8fee0f33c081d339a143306a0c82baacdac5a74c.tar.gz
[core] Fix RunLoop::run() behavior when called a second time
-rw-r--r--platform/default/run_loop.cpp1
-rw-r--r--test/util/run_loop.cpp21
2 files changed, 22 insertions, 0 deletions
diff --git a/platform/default/run_loop.cpp b/platform/default/run_loop.cpp
index 76c01b80b7..6230e8f1ab 100644
--- a/platform/default/run_loop.cpp
+++ b/platform/default/run_loop.cpp
@@ -151,6 +151,7 @@ void RunLoop::push(std::shared_ptr<WorkTask> task) {
void RunLoop::run() {
MBGL_VERIFY_THREAD(tid);
+ uv_ref(impl->holderHandle());
uv_run(impl->loop, UV_RUN_DEFAULT);
}
diff --git a/test/util/run_loop.cpp b/test/util/run_loop.cpp
index b6e5acca09..565ce2c066 100644
--- a/test/util/run_loop.cpp
+++ b/test/util/run_loop.cpp
@@ -29,3 +29,24 @@ TEST(RunLoop, MultipleStop) {
loop.run();
}
+
+TEST(RunLoop, MultipleRun) {
+ RunLoop loop(RunLoop::Type::New);
+
+ Timer timer;
+ timer.start(mbgl::Duration::zero(), mbgl::Duration::zero(), [&] {
+ loop.stop();
+ });
+
+ loop.run();
+
+ bool secondTimeout = false;
+ timer.start(mbgl::Duration::zero(), mbgl::Duration::zero(), [&] {
+ secondTimeout = true;
+ loop.stop();
+ });
+
+ loop.run();
+
+ EXPECT_TRUE(secondTimeout);
+}