Switch to side-by-side view

--- a/Allura/allura/model/notification.py
+++ b/Allura/allura/model/notification.py
@@ -31,6 +31,7 @@
 
 from allura.lib import helpers as h
 from allura.lib import security
+from allura.lib.utils import take_while_true
 import allura.tasks.mail_tasks
 
 from .session import main_orm_session, project_orm_session
@@ -450,15 +451,19 @@
         q_digest = dict(
             type={'$in': ['digest', 'summary']},
             next_scheduled={'$lt':now})
-        for mbox in cls.query.find(q_direct):
-            mbox = cls.query.find_and_modify(
-                query=dict(_id=mbox._id),
+
+        def find_and_modify_direct_mbox():
+            return cls.query.find_and_modify(
+                query=q_direct,
                 update={'$set': dict(
                             queue=[],
                             queue_empty=True,
                         )},
                 new=False)
+
+        for mbox in take_while_true(find_and_modify_direct_mbox):
             mbox.fire(now)
+
         for mbox in cls.query.find(q_digest):
             next_scheduled = now
             if mbox.frequency.unit == 'day':