[gnome-shell] dbusServices/screencast: Handle pipeline failures gracefully



commit dc0491ade86a63e598da5fd0319f89c7c53b4e18
Author: Florian Müllner <fmuellner gnome org>
Date:   Wed Jun 9 16:42:52 2021 +0200

    dbusServices/screencast: Handle pipeline failures gracefully
    
    If parsing the pipeline fails for some reason, we currently end up
    with a zombie session that leads to a stuck recording indicator in
    gnome-shell.
    
    Instead, properly tear down the session to allow mutter and gnome-shell
    to correctly update their state.
    
    Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1878>

 js/dbusServices/screencast/screencastService.js | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/js/dbusServices/screencast/screencastService.js b/js/dbusServices/screencast/screencastService.js
index fb56fdb3a7..708a15c84e 100644
--- a/js/dbusServices/screencast/screencastService.js
+++ b/js/dbusServices/screencast/screencastService.js
@@ -136,7 +136,8 @@ var Recorder = class {
     }
 
     _startPipeline(nodeId) {
-        this._ensurePipeline(nodeId);
+        if (!this._ensurePipeline(nodeId))
+            return;
 
         const bus = this._pipeline.get_bus();
         bus.add_watch(bus, this._onBusMessage.bind(this));
@@ -234,9 +235,15 @@ var Recorder = class {
             filesink location="${this._filePath}"`;
         fullPipeline = this._substituteThreadCount(fullPipeline);
 
-        this._pipeline = Gst.parse_launch_full(fullPipeline,
-            null,
-            Gst.ParseFlags.FATAL_ERRORS);
+        try {
+            this._pipeline = Gst.parse_launch_full(fullPipeline,
+                null,
+                Gst.ParseFlags.FATAL_ERRORS);
+        }  catch (e) {
+            log(`Failed to create pipeline: ${e}`);
+            this._notifyStopped();
+        }
+        return !!this._pipeline;
     }
 };
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]