From aab9f08bc15ec7c579fe8ae04b6482ee49ba38b4 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Fri, 19 Nov 2021 21:10:29 +0100
Subject: [PATCH] FIX: Try to minimize the segv thing when quiting and leaking
 MPV

---
 src/Lib/Audio.cc                     | 2 +-
 src/UI/DocumentViews/MpvContainer.cc | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/Lib/Audio.cc b/src/Lib/Audio.cc
index 290af835..6f02dbee 100644
--- a/src/Lib/Audio.cc
+++ b/src/Lib/Audio.cc
@@ -128,7 +128,7 @@ AudioStream::decodeData()
                 const size_t frame_count = static_cast<size_t>(frame_count_int);
                 dataPtr                  = reinterpret_cast<double *>(
                     realloc(dataPtr, (dataSize + static_cast<size_t>(dataFrame->nb_samples)) *
-                                         sizeof(double)));
+                                                          sizeof(double)));
                 memcpy(dataPtr + dataSize, buffer, frame_count * sizeof(double));
                 dataSize += frame_count;
             }
diff --git a/src/UI/DocumentViews/MpvContainer.cc b/src/UI/DocumentViews/MpvContainer.cc
index b6350953..ec7c8d47 100644
--- a/src/UI/DocumentViews/MpvContainer.cc
+++ b/src/UI/DocumentViews/MpvContainer.cc
@@ -107,6 +107,14 @@ MpvContainer::~MpvContainer() noexcept
         logWarning() << "The main window was already destroyed, "
                         "don't destroy MPV and let it leak, "
                         "the OS will collect the garbage.";
+        if (mpv) {
+            asyncCommand(AsyncCmdType::None, { "quit", nullptr });
+            registerMpvTimeCallback(nullptr);
+            registerMpvDurationCallback(nullptr);
+            asyncCommand(AsyncCmdType::None, { "quit", nullptr });
+            mpv                     = nullptr; // Stop all other callbacks here
+            isMpvAlreadyInitialized = false;   // De-init
+        }
     }
 }
 
-- 
GitLab