1
0
mirror of https://github.com/fuse-friends/fuse-native synced 2024-10-27 18:34:01 +00:00

more timeout logic

This commit is contained in:
Mathias Buus 2020-01-31 14:56:23 +01:00
parent 38a4a52231
commit 9d0892abdd

View File

@ -203,7 +203,6 @@ class Fuse extends Nanoresource {
_makeHandlerArray () { _makeHandlerArray () {
const self = this const self = this
const handlers = new Array(OpcodesAndDefaults.size) const handlers = new Array(OpcodesAndDefaults.size)
const to = this.timeout
for (const [name, { op, defaults }] of OpcodesAndDefaults) { for (const [name, { op, defaults }] of OpcodesAndDefaults) {
const nativeSignal = binding[`fuse_native_signal_${name}`] const nativeSignal = binding[`fuse_native_signal_${name}`]
@ -215,6 +214,13 @@ class Fuse extends Nanoresource {
return handlers return handlers
function makeHandler (name, op, defaults, nativeSignal) { function makeHandler (name, op, defaults, nativeSignal) {
let to = self.timeout
if (typeof to === 'object' && to) {
const defaultTimeout = to.default || DEFAULT_TIMEOUT
to = to[name]
if (!to && to !== false) to = defaultTimeout
}
return function (nativeHandler, opCode, ...args) { return function (nativeHandler, opCode, ...args) {
const sig = signal.bind(null, nativeHandler) const sig = signal.bind(null, nativeHandler)
const boundSignal = to ? autoTimeout(sig) : sig const boundSignal = to ? autoTimeout(sig) : sig
@ -231,18 +237,18 @@ class Fuse extends Nanoresource {
} }
return process.nextTick(nativeSignal, ...arr) return process.nextTick(nativeSignal, ...arr)
} }
}
function autoTimeout (cb) { function autoTimeout (cb) {
let called = false let called = false
const timeout = setTimeout(timeoutWrap, to, TIMEOUT_ERRNO) const timeout = setTimeout(timeoutWrap, to, TIMEOUT_ERRNO)
return timeoutWrap return timeoutWrap
function timeoutWrap (...args) { function timeoutWrap (...args) {
if (called) return if (called) return
called = true called = true
clearTimeout(timeout) clearTimeout(timeout)
cb(...args) cb(...args)
}
} }
} }
} }