From dc0491ade86a63e598da5fd0319f89c7c53b4e18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 9 Jun 2021 16:42:52 +0200 Subject: [PATCH] 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: --- 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 fb56fdb3a..708a15c84 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; } };