diff options
author | aunsane <aunsane@gmail.com> | 2018-04-27 21:33:17 +0300 |
---|---|---|
committer | aunsane <aunsane@gmail.com> | 2018-04-27 21:33:17 +0300 |
commit | e1ec72eab6d00b3ba38e5932bc88920f103b6e4a (patch) | |
tree | 999de2725a83e30fbbf6576200525d4ef0c5fe38 /protocols/Telegram/tdlib/td/tdactor/test/actors_bugs.cpp | |
parent | b9ce1d4d98525490ca1a38e2d9fd4f3369adb3e0 (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.cpp | 47 |
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(); +} |