summaryrefslogtreecommitdiff
path: root/protocols/Telegram/tdlib/td/tdactor/test/actors_bugs.cpp
diff options
context:
space:
mode:
authoraunsane <aunsane@gmail.com>2018-04-27 21:33:17 +0300
committeraunsane <aunsane@gmail.com>2018-04-27 21:33:17 +0300
commite1ec72eab6d00b3ba38e5932bc88920f103b6e4a (patch)
tree999de2725a83e30fbbf6576200525d4ef0c5fe38 /protocols/Telegram/tdlib/td/tdactor/test/actors_bugs.cpp
parentb9ce1d4d98525490ca1a38e2d9fd4f3369adb3e0 (diff)
Telegram: initial commit
- tdlib moved to telegram dir
Diffstat (limited to 'protocols/Telegram/tdlib/td/tdactor/test/actors_bugs.cpp')
-rw-r--r--protocols/Telegram/tdlib/td/tdactor/test/actors_bugs.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/protocols/Telegram/tdlib/td/tdactor/test/actors_bugs.cpp b/protocols/Telegram/tdlib/td/tdactor/test/actors_bugs.cpp
new file mode 100644
index 0000000000..f4267f2818
--- /dev/null
+++ b/protocols/Telegram/tdlib/td/tdactor/test/actors_bugs.cpp
@@ -0,0 +1,47 @@
+//
+// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2018
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+#include "td/utils/tests.h"
+
+#include "td/actor/Timeout.h"
+
+using namespace td;
+
+TEST(MultiTimeout, bug) {
+ ConcurrentScheduler sched;
+ int threads_n = 0;
+ sched.init(threads_n);
+
+ sched.start();
+ std::unique_ptr<MultiTimeout> multi_timeout;
+ struct Data {
+ MultiTimeout *multi_timeout;
+ };
+ Data data;
+
+ {
+ auto guard = sched.get_current_guard();
+ multi_timeout = std::make_unique<MultiTimeout>();
+ data.multi_timeout = multi_timeout.get();
+ multi_timeout->set_callback([](void *void_data, int64 key) {
+ auto &data = *static_cast<Data *>(void_data);
+ if (key == 1) {
+ data.multi_timeout->cancel_timeout(key + 1);
+ data.multi_timeout->set_timeout_in(key + 2, 1);
+ } else {
+ Scheduler::instance()->finish();
+ }
+ });
+ multi_timeout->set_callback_data(&data);
+ multi_timeout->set_timeout_in(1, 1);
+ multi_timeout->set_timeout_in(2, 2);
+ }
+
+ while (sched.run_main(10)) {
+ // empty
+ }
+ sched.finish();
+}