Viewing File: /home/ubuntu/efiexchange-node-base/node_modules/on-exit-leak-free/index.js
'use strict'
function genWrap (wraps, ref, fn, event) {
function wrap () {
const obj = ref.deref()
// This should alway happen, however GC is
// undeterministic so it might happen.
/* istanbul ignore else */
if (obj !== undefined) {
fn(obj, event)
}
}
wraps[event] = wrap
process.once(event, wrap)
}
const registry = new FinalizationRegistry(clear)
const map = new WeakMap()
function clear (wraps) {
process.removeListener('exit', wraps.exit)
process.removeListener('beforeExit', wraps.beforeExit)
}
function register (obj, fn) {
if (obj === undefined) {
throw new Error('the object can\'t be undefined')
}
const ref = new WeakRef(obj)
const wraps = {}
map.set(obj, wraps)
registry.register(obj, wraps)
genWrap(wraps, ref, fn, 'exit')
genWrap(wraps, ref, fn, 'beforeExit')
}
function unregister (obj) {
const wraps = map.get(obj)
map.delete(obj)
if (wraps) {
clear(wraps)
}
registry.unregister(obj)
}
module.exports = {
register,
unregister
}
Back to Directory
File Manager