summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
+}