   new EventStream describe(Bacon, "fromArray", values), (sink) ->
     unsubd = false
     reply = Bacon.more
-    while (reply != Bacon.noMore) and !unsubd
-      if i >= values.length
-        sink(end())
-        reply = Bacon.noMore
-      else
-        value = values[i++]
-        reply = sink(toEvent(value))
+    push = ->
+      if (reply != Bacon.noMore) and !unsubd
+        if i >= values.length
+          sink(end())
+          reply = Bacon.noMore
+        else
+          value = values[i++]
+          reply = sink(toEvent(value))
+          UpdateBarrier.afterTransaction push
+    push()
     -> unsubd = true
 
 Bacon.mergeAll = (streams...) ->

        else
          [data, stopper] = event.value()
          if stopper.length
            @push end()
          else
            reply = Bacon.more


  hasWaiters = -> waiterObs.length > 0

  { whenDoneWith, hasWaiters, inTransaction, currentEventId, wrappedSubscribe, afterTransaction }
)()

Bacon.EventStream = EventStream
