mirror of
https://github.com/edu4rdshl/gnome-shell.git
synced 2026-07-17 23:24:51 +00:00
js: Use Shell.util_spawn_async functions to launch external processes
As explained in previous commits, it's not safe to use JS code in child
function callbacks, so let's use the safer version of it.
Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6698
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3293>
(cherry picked from commit 26e8fb90fb)
This commit is contained in:
parent
ef1bdf7934
commit
e633b1d4f5
3 changed files with 8 additions and 28 deletions
|
|
@ -115,16 +115,9 @@ class IBusManager extends Signals.EventEmitter {
|
|||
const env = launchContext.get_environment();
|
||||
// Use DO_NOT_REAP_CHILD to avoid adouble-fork internally
|
||||
// since ibus-daemon refuses to start with init as its parent.
|
||||
const [success_, pid] = GLib.spawn_async(
|
||||
const pid = Shell.util_spawn_async(
|
||||
null, cmdLine, env,
|
||||
GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD,
|
||||
() => {
|
||||
try {
|
||||
global.context.restore_rlimit_nofile();
|
||||
} catch (err) {
|
||||
}
|
||||
}
|
||||
);
|
||||
GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD);
|
||||
GLib.child_watch_add(
|
||||
GLib.PRIORITY_DEFAULT,
|
||||
pid,
|
||||
|
|
|
|||
|
|
@ -118,19 +118,12 @@ export function spawnApp(argv) {
|
|||
* this will throw an error.
|
||||
*/
|
||||
export function trySpawn(argv) {
|
||||
let success_, pid;
|
||||
let pid;
|
||||
try {
|
||||
const launchContext = global.create_app_launch_context(0, -1);
|
||||
[success_, pid] = GLib.spawn_async(
|
||||
pid = Shell.util_spawn_async(
|
||||
null, argv, launchContext.get_environment(),
|
||||
GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD,
|
||||
() => {
|
||||
try {
|
||||
global.context.restore_rlimit_nofile();
|
||||
} catch (err) {
|
||||
}
|
||||
}
|
||||
);
|
||||
GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD);
|
||||
} catch (err) {
|
||||
/* Rewrite the error in case of ENOENT */
|
||||
if (err.matches(GLib.SpawnError, GLib.SpawnError.NOENT)) {
|
||||
|
|
|
|||
|
|
@ -456,18 +456,12 @@ class VPNRequestHandler extends Signals.EventEmitter {
|
|||
|
||||
try {
|
||||
const launchContext = global.create_app_launch_context(0, -1);
|
||||
let [success_, pid, stdin, stdout, stderr] =
|
||||
GLib.spawn_async_with_pipes(
|
||||
let [pid, stdin, stdout, stderr] =
|
||||
Shell.util_spawn_async_with_pipes(
|
||||
null, /* pwd */
|
||||
argv,
|
||||
launchContext.get_environment(),
|
||||
GLib.SpawnFlags.DO_NOT_REAP_CHILD,
|
||||
() => {
|
||||
try {
|
||||
global.context.restore_rlimit_nofile();
|
||||
} catch (err) {
|
||||
}
|
||||
});
|
||||
GLib.SpawnFlags.DO_NOT_REAP_CHILD);
|
||||
|
||||
this._childPid = pid;
|
||||
this._stdin = new GioUnix.OutputStream({fd: stdin, close_fd: true});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue