New issue
Advanced search Search tips

Issue 659267 link

Starred by 1 user

Issue metadata

Status: Archived
Owner: ----
Closed: Nov 2017
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 2
Type: Bug



Sign in to add a comment

components/scheduler/base/task_queue_impl.cc bool TaskQueueImpl::PostDelayedTaskImpl fault in pushontodelayedincomingqueue is unhandled

Reported by michael_...@hotmail.com, Oct 25 2016

Issue description

UserAgent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36

Steps to reproduce the problem:
Found via static analysis

What is the expected behavior?

What went wrong?
Potential semantic error (static analysis verification).

Did this work before? N/A 

Chrome version: 53.0.2785.143  Channel: n/a
OS Version: 10.0
Flash Version: Shockwave Flash 23.0 r0

Is there a fault handler for failure in PushOntoDelayedIncomingQueue in the fast path?
 
Labels: TE-NeedsTriageHelp
Specifically:

if (base::PlatformThread::CurrentId() == thread_id_) {
    // Lock-free fast path for delayed tasks posted from the main thread.
    if (!main_thread_only().task_queue_manager)
      return false;

    EnqueueOrder sequence_number =
        main_thread_only().task_queue_manager->GetNextSequenceNumber();

    base::TimeTicks time_domain_now = main_thread_only().time_domain->Now();
    base::TimeTicks time_domain_delayed_run_time = time_domain_now + delay;
--->    PushOntoDelayedIncomingQueueFromMainThread(
        Task(from_here, task, time_domain_delayed_run_time, sequence_number,
             task_type != TaskType::NON_NESTABLE),
        time_domain_now);
  } else {
    // NOTE posting a delayed task from a different thread is not expected to
    // be common. This pathway is less optimal than perhaps it could be
    // because it causes two main thread tasks to be run.  Should this
    // assumption prove to be false in future, we may need to revisit this.
    base::AutoLock lock(any_thread_lock_);
    if (!any_thread().task_queue_manager)
      return false;

    EnqueueOrder sequence_number =
        any_thread().task_queue_manager->GetNextSequenceNumber();

    base::TimeTicks time_domain_now = any_thread().time_domain->Now();
    base::TimeTicks time_domain_delayed_run_time = time_domain_now + delay;
    PushOntoDelayedIncomingQueueLocked(
        Task(from_here, task, time_domain_delayed_run_time, sequence_number,
             task_type != TaskType::NON_NESTABLE));
  }
  return true;

If the PushOntoDelayedIncomingQueueFromMainThread call fails, there isn't any fall-back to the slow-path or re-attempt, it simply returns true.
Project Member

Comment 3 by sheriffbot@chromium.org, Nov 3 2017

Status: Archived (was: Unconfirmed)
Issue has not been modified or commented on in the last 365 days, please re-open or file a new bug if this is still an issue.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Sign in to add a comment