# HG changeset patch
# User Wuzzy <Wuzzy2@mail.ru>
# Date 1533746172 -7200
# Node ID 1b536e268519044dd381479e19c689277edc08c2
# Parent  690cc84e9fd668f1ec91bb564f8604236e8b42a4
Fix frontend crash when rapidly aborting many active video encodings. Fixes bug 595

diff -r 690cc84e9fd6 -r 1b536e268519 ChangeLog.txt
--- a/ChangeLog.txt	Wed Aug 08 15:22:34 2018 +0200
+++ b/ChangeLog.txt	Wed Aug 08 18:36:12 2018 +0200
@@ -32,6 +32,7 @@
 
 Frontend:
  + Add setting to disable audio dampening when losing window focus
+ * Fix rare crash when aborting video encoding in progress
  * Controllers are detected again
  * No longer allow having schemes with equal names (case-insensitive)
  * Lobby/room: No longer allow opening context menu if no player selected
diff -r 690cc84e9fd6 -r 1b536e268519 QTfrontend/net/recorder.cpp
--- a/QTfrontend/net/recorder.cpp	Wed Aug 08 15:22:34 2018 +0200
+++ b/QTfrontend/net/recorder.cpp	Wed Aug 08 18:36:12 2018 +0200
@@ -39,6 +39,7 @@
     this->prefix = prefix;
     item = 0;
     finished = false;
+    aborted = false;
     name = prefix + "." + LibavInteraction::instance().getExtension(config->AVFormat());
 }
 
@@ -152,3 +153,10 @@
 {
     return true;
 }
+
+void HWRecorder::abort()
+{
+    queue.removeOne(this);
+    aborted = true;
+    deleteLater();
+}
diff -r 690cc84e9fd6 -r 1b536e268519 QTfrontend/net/recorder.h
--- a/QTfrontend/net/recorder.h	Wed Aug 08 15:22:34 2018 +0200
+++ b/QTfrontend/net/recorder.h	Wed Aug 08 18:36:12 2018 +0200
@@ -35,6 +35,7 @@
         virtual ~HWRecorder();
 
         void EncodeVideo(const QByteArray & record);
+        void abort();
         bool simultaneousRun();
 
         VideoItem * item; // used by pagevideos
@@ -53,6 +54,7 @@
 
     private:
         bool finished;
+        bool aborted;
         GameUIConfig * config;
 };
 
diff -r 690cc84e9fd6 -r 1b536e268519 QTfrontend/ui/page/pagevideos.cpp
--- a/QTfrontend/ui/page/pagevideos.cpp	Wed Aug 08 15:22:34 2018 +0200
+++ b/QTfrontend/ui/page/pagevideos.cpp	Wed Aug 08 18:36:12 2018 +0200
@@ -594,9 +594,9 @@
     if (reallyDeleteMsg.exec() != QMessageBox::Ok)
         return;
 
-    // remove
+    // abort / remove
     if (!item->ready())
-        item->pRecorder->deleteLater();
+        item->pRecorder->abort();
     else
     {
         cfgdir->remove("Videos/" + item->name);