mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
chore: add timeout to log when buffer takes v long
helps debug deadlocks
This commit is contained in:
@@ -21,6 +21,8 @@ const BUFFERABLE_EVENT = [
|
|||||||
'groups.update',
|
'groups.update',
|
||||||
] as const
|
] as const
|
||||||
|
|
||||||
|
const BUFFER_TIMEOUT_MS = 30_000
|
||||||
|
|
||||||
type BufferableEvent = typeof BUFFERABLE_EVENT[number]
|
type BufferableEvent = typeof BUFFERABLE_EVENT[number]
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -64,7 +66,12 @@ export const makeEventBuffer = (logger: Logger): BaileysBufferableEventEmitter =
|
|||||||
let data = makeBufferData()
|
let data = makeBufferData()
|
||||||
let isBuffering = false
|
let isBuffering = false
|
||||||
let preBufferTask: Promise<any> = Promise.resolve()
|
let preBufferTask: Promise<any> = Promise.resolve()
|
||||||
|
|
||||||
|
// debugging utils
|
||||||
let preBufferTraces: string[] = []
|
let preBufferTraces: string[] = []
|
||||||
|
let bufferStartTrace: string | undefined
|
||||||
|
let bufferTimeout: NodeJS.Timeout | undefined
|
||||||
|
let waitingForPreBufferEnd = false
|
||||||
|
|
||||||
// take the generic event and fire it as a baileys event
|
// take the generic event and fire it as a baileys event
|
||||||
ev.on('event', (map: BaileysEventData) => {
|
ev.on('event', (map: BaileysEventData) => {
|
||||||
@@ -73,10 +80,21 @@ export const makeEventBuffer = (logger: Logger): BaileysBufferableEventEmitter =
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function startTimeout() {
|
||||||
|
bufferTimeout = setTimeout(() => {
|
||||||
|
logger.warn(
|
||||||
|
{ preBufferTraces, bufferStartTrace, waitingForPreBufferEnd },
|
||||||
|
'event buffer taking a while'
|
||||||
|
)
|
||||||
|
}, BUFFER_TIMEOUT_MS)
|
||||||
|
}
|
||||||
|
|
||||||
function buffer() {
|
function buffer() {
|
||||||
if(!isBuffering) {
|
if(!isBuffering) {
|
||||||
logger.trace('buffering events')
|
logger.trace('buffering events')
|
||||||
isBuffering = true
|
isBuffering = true
|
||||||
|
startTimeout()
|
||||||
|
bufferStartTrace = new Error('buffer start').stack
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +107,9 @@ export const makeEventBuffer = (logger: Logger): BaileysBufferableEventEmitter =
|
|||||||
}
|
}
|
||||||
|
|
||||||
logger.trace({ preBufferTraces }, 'releasing buffered events...')
|
logger.trace({ preBufferTraces }, 'releasing buffered events...')
|
||||||
|
waitingForPreBufferEnd = true
|
||||||
await preBufferTask
|
await preBufferTask
|
||||||
|
waitingForPreBufferEnd = false
|
||||||
|
|
||||||
preBufferTraces = []
|
preBufferTraces = []
|
||||||
isBuffering = false
|
isBuffering = false
|
||||||
@@ -113,6 +133,8 @@ export const makeEventBuffer = (logger: Logger): BaileysBufferableEventEmitter =
|
|||||||
|
|
||||||
data = newData
|
data = newData
|
||||||
|
|
||||||
|
clearTimeout(bufferTimeout)
|
||||||
|
|
||||||
logger.trace(
|
logger.trace(
|
||||||
{ conditionalChatUpdatesLeft },
|
{ conditionalChatUpdatesLeft },
|
||||||
'released buffered events'
|
'released buffered events'
|
||||||
|
|||||||
Reference in New Issue
Block a user