From d377cbfa744f770c93f62ea6d53e175d90d07de7 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Sat, 4 May 2013 23:00:57 +0800 Subject: [PATCH] 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. --- renderer/api/lib/remote.coffee | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/renderer/api/lib/remote.coffee b/renderer/api/lib/remote.coffee index 8e99e0c2f248..8416fd8a8ea9 100644 --- a/renderer/api/lib/remote.coffee +++ b/renderer/api/lib/remote.coffee @@ -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.