Looks reasonable, but can you add some stuff to the comment for next() explaining the restrictions on calling it?
Add a concept of "in progress" to queues.
Review Request #891 — Created June 11, 2009 and submitted
Add a concept of "in progress" to queues. This change adds a concept of "in progress" to queues, allowing us to call start() multiple times without running the same queue multiple times, which would just cause problems. Now we can call start() all we want, but the queue will stay in sync. Note that calling next() multiple times will still cause the queue to be processed multiple times, out of order, but that's less of a problem. next() should only be called from a task in queue that is ending.
Tested with the corresponding Review Board change, and made sure the existing queues still function as expected.