fix(gui): fix memory leak on events handling

This commit is contained in:
Alexey Kasyanchuk
2018-08-20 12:04:14 +03:00
parent 8d1f4a1ce6
commit 349eedee0a

View File

@ -27,10 +27,13 @@ else
window.torrentSocket.callbacks = {} window.torrentSocket.callbacks = {}
window.torrentSocket.listeners = {} window.torrentSocket.listeners = {}
window.torrentSocket.on = (name, func) => { window.torrentSocket.on = (name, func) => {
const id = Math.random().toString(36).substring(2) + Math.random().toString(36).substring(2) + Math.random().toString(36).substring(2)
const newListener = (event, ...data) => { const newListener = (event, ...data) => {
func(...data) func(...data)
} }
window.torrentSocket.listeners[func] = newListener window.torrentSocket.listeners[id] = newListener
func._eventId = id
ipcRenderer.on(name, newListener); ipcRenderer.on(name, newListener);
} }
window.torrentSocket.off = (name, func) => { window.torrentSocket.off = (name, func) => {
@ -38,12 +41,13 @@ else
ipcRenderer.removeAllListeners(name); ipcRenderer.removeAllListeners(name);
else else
{ {
const realListener = window.torrentSocket.listeners[func] const realListener = window.torrentSocket.listeners[func._eventId]
if(realListener) if(realListener)
{ {
ipcRenderer.removeListener(name, realListener); ipcRenderer.removeListener(name, realListener);
delete window.torrentSocket.listeners[func] delete window.torrentSocket.listeners[func._eventId]
} }
delete func._eventId
} }
} }
window.torrentSocket.emit = (name, ...data) => { window.torrentSocket.emit = (name, ...data) => {