Don't send ATOM_BROWSER_DEREFERENCE message if context is already gone.

It's possible that the object gets destructed after reloading, however
since we already released all objects in browser when unloading, it
would cause troubles when sending message in an unexist context. We just
rely on the closure to mark whether the context is gone.

A more suitable solution, however, is to restart renderer process when
doing reloading.
This commit is contained in:
Cheng Zhao 2013-05-04 23:00:57 +08:00
parent 35441ad8fb
commit d377cbfa74

View file

@ -1,6 +1,8 @@
ipc = require 'ipc'
v8_util = process.atomBinding 'v8_util'
currentContextExist = true
class CallbacksRegistry
@nextId = 0
@callbacks = {}
@ -73,6 +75,7 @@ metaToValue = (meta) ->
# Track delegate object's life time, and tell the browser to clean up
# when the object is GCed.
v8_util.setDestructor ret, ->
return unless currentContextExist
ipc.sendChannel 'ATOM_BROWSER_DEREFERENCE', meta.storeId
# Mark this is a remote object.
@ -90,6 +93,7 @@ ipc.on 'ATOM_RENDERER_RELEASE_CALLBACK', (id) ->
# Release all resources of current render view when it's going to be unloaded.
window.addEventListener 'unload', (event) ->
currentContextExist = false
ipc.sendChannelSync 'ATOM_BROWSER_RELEASE_RENDER_VIEW'
# Get remote module.