Yes, I believe that is still how it works.  The early-return branch is only taken when cleanup has been done for a completed stage and then a redundant task completion is processed for that stage.  That should be a rare event -- it took us quite a while to see the bug in the current code.

Reynold actually deals with the bug in [PR 29](https://github.com/apache/incubator-spark/pull/29/files#diff-6a9ff7fb74fd490a50462d45db2d5e11R608) (already merged into 0.8.1-SNAPSHOT) by not even bothering to try to handle what can be done without getting a valid stage, so I could rework and simplify this PR to do the same.  Either way, this will soon get changed in 0.8.1 + my DAGScheduler changes.