feat update

This commit is contained in:
tqcq
2024-03-23 09:03:00 +08:00
parent 03a62901f2
commit e08d8b7984
4 changed files with 26 additions and 9 deletions

View File

@@ -18,30 +18,37 @@ PendingTaskSafetyFlag::Create()
sled::scoped_refptr<PendingTaskSafetyFlag>
PendingTaskSafetyFlag::CreateDetached()
{
return CreateInternal(true);
scoped_refptr<PendingTaskSafetyFlag> safety_flag = CreateInternal(true);
safety_flag->main_sequence_.Detach();
return safety_flag;
}
sled::scoped_refptr<PendingTaskSafetyFlag>
PendingTaskSafetyFlag::CreateDetachedInactive()
{
return CreateInternal(false);
scoped_refptr<PendingTaskSafetyFlag> safety_flag = CreateInternal(false);
safety_flag->main_sequence_.Detach();
return safety_flag;
}
void
PendingTaskSafetyFlag::SetNotAlive()
{
SLED_DCHECK_RUN_ON(&main_sequence_);
alive_ = false;
}
void
PendingTaskSafetyFlag::SetAlive()
{
SLED_DCHECK_RUN_ON(&main_sequence_);
alive_ = true;
}
bool
PendingTaskSafetyFlag::alive() const
{
SLED_DCHECK_RUN_ON(&main_sequence_);
return alive_;
}

View File

@@ -11,11 +11,16 @@ TaskQueueTimeoutFactory::TaskQueueTimeout::TaskQueueTimeout(TaskQueueTimeoutFact
safety_flag_(PendingTaskSafetyFlag::Create())
{}
TaskQueueTimeoutFactory::TaskQueueTimeout::~TaskQueueTimeout() { safety_flag_->SetNotAlive(); }
TaskQueueTimeoutFactory::TaskQueueTimeout::~TaskQueueTimeout()
{
SLED_DCHECK_RUN_ON(&parent_.thread_checker_);
safety_flag_->SetNotAlive();
}
void
TaskQueueTimeoutFactory::TaskQueueTimeout::Start(DurationMs duration_ms, TimeoutID timeout_id)
{
SLED_DCHECK_RUN_ON(&parent_.thread_checker_);
ASSERT(timeout_expiration_ == std::numeric_limits<TimeMs>::max(), "");
timeout_expiration_ = parent_.get_time_() + duration_ms;
timeout_id_ = timeout_id;
@@ -36,10 +41,9 @@ TaskQueueTimeoutFactory::TaskQueueTimeout::Start(DurationMs duration_ms, Timeout
precision_,
SafeTask(safety_flag_,
[timeout_id, this]() {
// if (timeout_id != this->timeout_id_) { return; }
LOGV("timer", "Timeout expired: {}", timeout_id);
// FIXME: this is a bug, the posted_task_expiration_ should be reset to max
ASSERT(posted_task_expiration_ != std::numeric_limits<TimeMs>::max(), "");
SLED_DCHECK_RUN_ON(&parent_.thread_checker_);
DCHECK(posted_task_expiration_ != std::numeric_limits<TimeMs>::max(), "");
posted_task_expiration_ = std::numeric_limits<TimeMs>::max();
if (timeout_expiration_ == std::numeric_limits<TimeMs>::max()) {
@@ -67,6 +71,8 @@ TaskQueueTimeoutFactory::TaskQueueTimeout::Start(DurationMs duration_ms, Timeout
void
TaskQueueTimeoutFactory::TaskQueueTimeout::Stop()
{
SLED_DCHECK_RUN_ON(&parent_.thread_checker_);
timeout_expiration_ = std::numeric_limits<TimeMs>::max();
}