There could be a race condition if job is killed right after task attempt receives TA_DONE event. In that case, TaskImpl might receive T_ATTEMPT_SUCCEEDED followed by T_ATTEMPTED_KILLED for the same attempt, thus transition job to ERROR state.
a. The task is in KILL_WAIT.
b. TA receives TA_DONE event.
c. Before TA transitions to SUCCEEDED state, Task sends TA_KILL event.
d. TA transitions to SUCCEEDED state and thus send T_ATTEMPT_SUCCEEDED to the task. The task transitions to KILLED state.
e. TA processes TA_KILL event and sends T_ATTEMPT_KILLED to the task.
f. When task is in KILLED state, it can't handle T_ATTEMPT_KILLED event, thus transition job to ERROR state.