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>
This commit is contained in:
parent
bed0f43967
commit
dc0491ade8
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user