зеркало из https://github.com/microsoft/CCF.git
Only send Tick messages to live threads (#1639)
This commit is contained in:
Родитель
3ca2946c67
Коммит
4b4479ba54
|
@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
### Fixed
|
||||
- Fixed infinite memory growth issue (#1639)
|
||||
|
||||
## [0.13.3] - 2020-09-18
|
||||
### Added
|
||||
|
|
|
@ -301,27 +301,28 @@ namespace threading
|
|||
task.add_task_after(std::move(msg), ms);
|
||||
}
|
||||
|
||||
struct TickMsg
|
||||
{
|
||||
TickMsg(std::chrono::milliseconds elapsed_, Task& task_) :
|
||||
elapsed(elapsed_),
|
||||
task(task_)
|
||||
{}
|
||||
|
||||
std::chrono::milliseconds elapsed;
|
||||
Task& task;
|
||||
};
|
||||
|
||||
static void tick_cb(std::unique_ptr<Tmsg<TickMsg>> msg)
|
||||
{
|
||||
msg->data.task.tick(msg->data.elapsed);
|
||||
}
|
||||
|
||||
void tick(std::chrono::milliseconds elapsed)
|
||||
{
|
||||
struct TickMsg
|
||||
for (auto i = 0; i < thread_count; ++i)
|
||||
{
|
||||
TickMsg(std::chrono::milliseconds elapsed_, Task& task_) :
|
||||
elapsed(elapsed_),
|
||||
task(task_)
|
||||
{}
|
||||
|
||||
std::chrono::milliseconds elapsed;
|
||||
Task& task;
|
||||
};
|
||||
|
||||
for (auto& task : tasks)
|
||||
{
|
||||
auto msg = std::make_unique<Tmsg<TickMsg>>(
|
||||
[](std::unique_ptr<Tmsg<TickMsg>> msg) {
|
||||
msg->data.task.tick(msg->data.elapsed);
|
||||
},
|
||||
elapsed,
|
||||
task);
|
||||
auto& task = tasks[i];
|
||||
auto msg = std::make_unique<Tmsg<TickMsg>>(&tick_cb, elapsed, task);
|
||||
task.add_task(msg.release());
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче