From 6b9995a399d22ba313a2932e80127b2eeddf182b Mon Sep 17 00:00:00 2001 From: subnub Date: Tue, 12 May 2020 18:55:11 -0400 Subject: [PATCH] Still not sure about memory leak for video streaming, will probably create an issue for it in the future --- backend/services/ChunkService/FileSystemService.ts | 1 + backend/services/ChunkService/MongoService.ts | 1 + backend/services/ChunkService/S3Service.ts | 1 + .../services/ChunkService/utils/awaitStreamVideo.ts | 10 +++++++--- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/services/ChunkService/FileSystemService.ts b/backend/services/ChunkService/FileSystemService.ts index 32abca0..5bfa9b2 100644 --- a/backend/services/ChunkService/FileSystemService.ts +++ b/backend/services/ChunkService/FileSystemService.ts @@ -265,6 +265,7 @@ class FileSystemService implements ChunkInterface { await awaitStreamVideo(start, end, differenceStart, decipher, res, req, tempUUID, allStreamsToErrorCatch); console.log("Video Stream Finished"); + readStream.destroy(); } getPublicDownload = async(fileID: string, tempToken: any, res: Response) => { diff --git a/backend/services/ChunkService/MongoService.ts b/backend/services/ChunkService/MongoService.ts index 8f2b766..f18cf29 100644 --- a/backend/services/ChunkService/MongoService.ts +++ b/backend/services/ChunkService/MongoService.ts @@ -288,6 +288,7 @@ class MongoService implements ChunkInterface { const tempUUID = req.params.uuid; await awaitStreamVideo(start, end, differenceStart, decipher, res, req, tempUUID, allStreamsToErrorCatch); + readStream.destroy(); } deleteFile = async(userID: string, fileID: string) => { diff --git a/backend/services/ChunkService/S3Service.ts b/backend/services/ChunkService/S3Service.ts index 80f9374..694fc99 100644 --- a/backend/services/ChunkService/S3Service.ts +++ b/backend/services/ChunkService/S3Service.ts @@ -232,6 +232,7 @@ class S3Service implements ChunkInterface { await awaitStreamVideo(start, end, differenceStart, decipher, res, req, tempUUID, allStreamsToErrorCatch); console.log("Video stream finished"); + s3ReadStream.destroy(); } getThumbnail = async(user: UserInterface, id: string) => { diff --git a/backend/services/ChunkService/utils/awaitStreamVideo.ts b/backend/services/ChunkService/utils/awaitStreamVideo.ts index 7ce1cc4..f9c89a3 100644 --- a/backend/services/ChunkService/utils/awaitStreamVideo.ts +++ b/backend/services/ChunkService/utils/awaitStreamVideo.ts @@ -6,7 +6,7 @@ const awaitStreamVideo = (start: number, end:number, differenceStart: number, decipher: any, res: Response, req: Request, tempUUID: string, streamsToErrorCatch: any[]) => { const currentUUID = uuid.v4(); - //tempStorage[tempUUID] = currentUUID; + tempStorage[tempUUID] = currentUUID; return new Promise((resolve, reject) => { @@ -14,6 +14,7 @@ const awaitStreamVideo = (start: number, end:number, differenceStart: number, //let sizeCounter = 0; req.on("close", () => { + //console.log("close resolved"); streamsToErrorCatch.forEach((stream) => { stream.destroy(); }) @@ -21,6 +22,7 @@ const awaitStreamVideo = (start: number, end:number, differenceStart: number, }) req.on("end", () => { + //console.log("End resolved"); resolve(); }) @@ -35,11 +37,12 @@ const awaitStreamVideo = (start: number, end:number, differenceStart: number, //console.log("New Stream Requested, Desroying old stream"); streamsToErrorCatch.forEach((stream) => { - //stream.destroy(); + stream.destroy(); }) //console.log("Old Stream Desroyed"); - //resolve(); + //console.log("Old Stream Resolved"); + resolve(); //delete tempStorage[tempUUID]; } @@ -97,6 +100,7 @@ const awaitStreamVideo = (start: number, end:number, differenceStart: number, }) decipher.on("end", () => { + //console.log("decipher resolved"); res.end(); resolve(); })