[gnome-shell] dbusServices/screencast: Handle pipeline failures gracefully
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] dbusServices/screencast: Handle pipeline failures gracefully
- Date: Wed, 9 Jun 2021 15:25:30 +0000 (UTC)
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]