typical messaging deadlocks

case #1:

chrome -> sync ipc -> plugin -------+
                                    |
chrome <- sync sendmessage <-----+

case #2:

chrome -> sync sendmessage -> plugin -+
                                      |
chrome <- sync ipc <------------------+

case #3:

chrome -> sync ipc -> plugin -> plugin never responds back but keep pumping messages

non-e10s mitigation

case #1:

chrome -> sync -> plugin ----------------------------+
                                                     |
chrome | windowsmessageloop <- sync <- sendmessage <-+

case #2:

  • various tricks

case #3:

  • plugin hang dialog

e10s mitigation

chrome -> sync ipc | plugin

  • never happens

chrome -> sync sendmessage -> plugin

  • happens while chrome is dispatching messages, no sync/rpc calls on the stack?
  • content could be in a sync call to either when this happens

chrome -> sync ipc -> content -> sync ipc -> plugin -> sync ipc | chrome

  • never happens

chrome -> sync ipc -> content -> sync ipc -> plugin -> sync sendmessage -> chrome

  • can happen?

content -> sync ipc -> plugin -> plugin never responds back but keep pumping messages

  • content hang?

plugin deadlock

since the plugin's main thread is bound to chrome's main thread, if either slows down, or hangs, they both slow down or hang.

non-e10s mitigation

none

e10s mitigation

none

e10s notes:

  • the content process runs freely initially when chrome or plugin hang, until it sends a sync message to either.
  • content's main thread isn't caught up in the attached message queues problem afaict.
    • media related code migth break this if there's native ui and chrome parenting going on.