Based on the investigation of
MESOS-7744, the agent has a race in which "queued" tasks can still be launched after the agent has processed a kill task for them. This race was introduced when Slave::statusUpdate was made asynchronous:
(1) Slave::__run completes, task is now within Executor::queuedTasks
(2) Slave::killTask locates the executor based on the task ID residing in queuedTasks, calls Slave::statusUpdate() with TASK_KILLED
(3) Slave::___run assumes that killed tasks have been removed from Executor::queuedTasks, but this now occurs asynchronously in Slave::_statusUpdate. So, the executor still sees the queued task and delivers it and adds the task to Executor::launchedTasks.
(3) Slave::_statusUpdate runs, removes the task from Executor::launchedTasks and adds it to Executor::terminatedTasks.