 
       delete Tracker._computations[@_id]
 
-      for callback in @_onStopCallbacks
+      while @_onStopCallbacks.length
+        callback = @_onStopCallbacks.shift()
         Tracker.nonreactive =>
           callback @
-      @_onStopCallbacks = []
 
   # Runs an arbitrary function inside the computation. This allows breaking many assumptions, so use it very carefully.
   _runInside: (func) ->

    @_id = nextId++
    @_onInvalidateCallbacks = []
    @_onStopCallbacks = []
    @_recomputing = false

    @_trackerInstance = Tracker._trackerInstance()

    FiberUtils.synchronize guard, @_id, =>
      @invalidated = false

      @_runInside (computation) =>
        while @_beforeRunCallbacks.length
          callback = @_beforeRunCallbacks.shift()
          Tracker.nonreactive =>
            callback @

        @_func.call null, @

        while @_afterRunCallbacks.length
          callback = @_afterRunCallbacks.shift()
          Tracker.nonreactive =>
            callback @

  _needsRecompute: ->
    @invalidated and not @stopped
