Skip to content

Infinite loop of rendering errors in FastBoot #68

@davewasmer

Description

@davewasmer

So this is a bit of tricky one, and I'm not sure if it's this add or ember-page-title causing it.

Basically, under a very specific set of circumstances, a rendering error (i.e. trying to invoke a non-existent helper) will trigger an infinite loop of errors in FastBoot that ends up spiking the entire fastboot-app-server.

I've put together a minimal reproduction. Clone the repo down, ember s, and hit localhost:4200 to see it in action. As a heads up - once it starts dumping the error in a loop, it stops responding to SIGTERMs (Ctrl-C), so you'll need to forcibly kill the process (i.e. "Force Quit" on Mac or SIGKILL with kill -9).

I'm at a loss as to what might cause this - the errors being dumped aren't super helpful. After the initial error about being unable to find the helper, it just starts dumping this repeatededly:

Details
TypeError: Cannot read property 'syscall' of null
    at AppendOpcodes.evaluate (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@glimmer/runtime.js:69:1)
    at LowLevelVM.evaluateSyscall (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@glimmer/runtime.js:3269:1)
    at LowLevelVM.evaluateInner (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@glimmer/runtime.js:3215:1)
    at LowLevelVM.evaluateOuter (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@glimmer/runtime.js:3207:1)
    at VM.next (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@glimmer/runtime.js:5262:1)
    at TemplateIteratorImpl.next (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@glimmer/runtime.js:5298:1)
    at RootState.render (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@ember/-internals/glimmer.js:5883:1)
    at TransactionRunner.runInTransaction (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@ember/-internals/metal.js:593:1)
    at runInTransaction (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@ember/-internals/metal.js:728:1)
    at InertRenderer._renderRoots (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@ember/-internals/glimmer.js:6179:1)
    at InertRenderer._renderRootsTransaction (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@ember/-internals/glimmer.js:6216:1)
    at InertRenderer._revalidate (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@ember/-internals/glimmer.js:6262:1)
    at invokeWithOnError (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/backburner.js:344:1)
    at Queue.flush (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/backburner.js:226:1)
    at DeferredActionQueues.flush (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/backburner.js:423:1)
    at Backburner._end (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/backburner.js:957:1)
    at Backburner.end (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/backburner.js:707:1)
    at Backburner._run (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/backburner.js:1006:1)
    at Backburner._join (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/backburner.js:986:1)
    at Backburner.join (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/backburner.js:757:1)
    at Array.loopEnd (/var/folders/p4/2wqjhkg160sfdr7pykp6f3ch0000gn/T/broccoli-72882ZYE8RoqN9B1E/out-221-broccoli_merge_trees/assets/@ember/-internals/glimmer.js:6008:1)
  [...snip ~100 more lines of repetitive backburner frames...]

Some observations I've made (not sure of the relevance). The problem only seems to occur if:

  • the non-existent helper is invoked in a child template. If I move the invocation from index.hbs into application.hbs, it's fine.
  • both {{head-layout}} and {{title}} invocations are present, and they both occur before the {{outlet}} invocation. Remove either, or move either below the {{outlet}}, and it's fine.

Things that don't seem to matter:

  • the order of invocation for {{head-layout}} and {{title}}. Either one first, still hit the problem.
  • the contents of head.hbs. I can comment out the entire file and it still occurs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions