Allow "released callback" errors to be traced to remote calls
This commit is contained in:
parent
125444df15
commit
aeb24b784d
2 changed files with 17 additions and 1 deletions
|
@ -69,7 +69,9 @@ unwrapArgs = (sender, args) ->
|
||||||
rendererReleased = true
|
rendererReleased = true
|
||||||
|
|
||||||
ret = ->
|
ret = ->
|
||||||
throw new Error('Calling a callback of released renderer view') if rendererReleased
|
if rendererReleased
|
||||||
|
throw new Error("Attempting to call a function in a renderer window
|
||||||
|
that has been closed or released. Function provided here: #{meta.id}.")
|
||||||
sender.send 'ATOM_RENDERER_CALLBACK', meta.id, valueToMeta(sender, arguments)
|
sender.send 'ATOM_RENDERER_CALLBACK', meta.id, valueToMeta(sender, arguments)
|
||||||
v8Util.setDestructor ret, ->
|
v8Util.setDestructor ret, ->
|
||||||
return if rendererReleased
|
return if rendererReleased
|
||||||
|
|
|
@ -11,6 +11,20 @@ class CallbacksRegistry
|
||||||
|
|
||||||
add: (callback) ->
|
add: (callback) ->
|
||||||
id = Math.random().toString()
|
id = Math.random().toString()
|
||||||
|
|
||||||
|
# Capture the location of the function and put it in the ID string,
|
||||||
|
# so that release errors can be tracked down easily.
|
||||||
|
regexp = /at (.*)/gi
|
||||||
|
stackString = (new Error).stack
|
||||||
|
|
||||||
|
while (match = regexp.exec(stackString)) isnt null
|
||||||
|
[x, location] = match
|
||||||
|
continue if location.indexOf('(native)') isnt -1
|
||||||
|
continue if location.indexOf('atom.asar') isnt -1
|
||||||
|
[x, filenameAndLine] = /([^/^\)]*)\)?$/gi.exec(location)
|
||||||
|
id = "#{filenameAndLine} (#{id})"
|
||||||
|
break
|
||||||
|
|
||||||
@callbacks[id] = callback
|
@callbacks[id] = callback
|
||||||
id
|
id
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue