From 1508a0bff48049b92bdb8f1262fefd87c6f2b435 Mon Sep 17 00:00:00 2001 From: dumbmoron Date: Sun, 5 Nov 2023 22:07:34 +0000 Subject: [PATCH] stream: send SIGKILL after timeout in case the ffmpeg process decides to hang when SIGTERM'd --- src/modules/stream/types.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/modules/stream/types.js b/src/modules/stream/types.js index 65df420..5c7fbdb 100644 --- a/src/modules/stream/types.js +++ b/src/modules/stream/types.js @@ -11,6 +11,14 @@ function closeResponse(res) { return res.destroy(); } +function killProcess(p) { + p?.kill(); + setTimeout(() => { + if (p?.exitCode === null) + p?.kill(9); + }, 5000); +} + export async function streamDefault(streamInfo, res) { const abortController = new AbortController(); const shutdown = () => (abortController.abort(), closeResponse(res)); @@ -37,7 +45,7 @@ export async function streamDefault(streamInfo, res) { export async function streamLiveRender(streamInfo, res) { let abortController = new AbortController(), process; - const shutdown = () => (abortController.abort(), process?.kill(), closeResponse(res)); + const shutdown = () => (abortController.abort(), killProcess(process), closeResponse(res)); try { if (streamInfo.urls.length !== 2) return shutdown(); @@ -85,7 +93,7 @@ export async function streamLiveRender(streamInfo, res) { export function streamAudioOnly(streamInfo, res) { let process; - const shutdown = () => (process?.kill(), closeResponse(res)); + const shutdown = () => (killProcess(process), closeResponse(res)); try { let args = [ @@ -132,7 +140,7 @@ export function streamAudioOnly(streamInfo, res) { export function streamVideoOnly(streamInfo, res) { let process; - const shutdown = () => (process?.kill(), closeResponse(res)); + const shutdown = () => (killProcess(process), closeResponse(res)); try { let format = streamInfo.filename.split('.')[streamInfo.filename.split('.').length - 1], args = [