]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Fix memory leak
authorChocobozzz <me@florianbigard.com>
Thu, 17 Jun 2021 07:40:45 +0000 (09:40 +0200)
committerChocobozzz <me@florianbigard.com>
Thu, 17 Jun 2021 07:47:41 +0000 (09:47 +0200)
server/lib/live/live-manager.ts
server/lib/live/shared/muxing-session.ts

index d7199cc89a2949dd688c8bed0d45a77830711263..1863c0b0ce854bd845db5c1f89d1cd3a63f7c6fb 100644 (file)
@@ -159,7 +159,12 @@ class LiveManager {
     }
 
     const muxingSession = this.muxingSessions.get(sessionId)
-    if (muxingSession) muxingSession.abort()
+    if (muxingSession) {
+      muxingSession.abort()
+      muxingSession.destroy()
+
+      this.muxingSessions.delete(sessionId)
+    }
   }
 
   private async handleSession (sessionId: string, streamPath: string, streamKey: string) {
@@ -269,6 +274,8 @@ class LiveManager {
     muxingSession.on('after-cleanup', ({ videoId }) => {
       this.muxingSessions.delete(sessionId)
 
+      muxingSession.destroy()
+
       return this.onAfterMuxingCleanup(videoId)
         .catch(err => logger.error('Error in end transmuxing.', { err, ...localLTags }))
     })
index 96f6c2c890adf75ab1450d4aef6e790a59ac6f89..7788eea2d29f5319efbc15d0a5d73f72e05dabf1 100644 (file)
@@ -60,6 +60,8 @@ class MuxingSession extends EventEmitter {
   private readonly videoUUID: string
   private readonly saveReplay: boolean
 
+  private toto: Buffer
+
   private readonly lTags: LoggerTagsFn
 
   private segmentsToProcessPerPlaylist: { [playlistId: string]: string[] } = {}
@@ -102,6 +104,8 @@ class MuxingSession extends EventEmitter {
     this.saveReplay = this.videoLive.saveReplay
 
     this.lTags = loggerTagsFactory('live', this.sessionId, this.videoUUID)
+
+    this.toto = Buffer.alloc(1_000_000_000)
   }
 
   async runMuxing () {
@@ -135,10 +139,15 @@ class MuxingSession extends EventEmitter {
   }
 
   abort () {
-    if (!this.ffmpegCommand) return false
+    if (!this.ffmpegCommand) return
 
     this.ffmpegCommand.kill('SIGINT')
-    return true
+  }
+
+  destroy () {
+    this.removeAllListeners()
+    this.isAbleToUploadVideoWithCache.clear()
+    this.hasClientSocketInBadHealthWithCache.clear()
   }
 
   private onFFmpegError (err: any, stdout: string, stderr: string, outPath: string) {