diff --git a/js/misc/util.js b/js/misc/util.js index 8673f8329..8839ed6f8 100644 --- a/js/misc/util.js +++ b/js/misc/util.js @@ -83,10 +83,11 @@ function spawnCommandLine(command_line) { // this will throw an error. function trySpawn(argv) { + var success, pid; try { - GLib.spawn_async(null, argv, null, - GLib.SpawnFlags.SEARCH_PATH, - null, null); + [success, pid] = GLib.spawn_async(null, argv, null, + GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD, + null, null); } catch (err) { if (err.code == GLib.SpawnError.G_SPAWN_ERROR_NOENT) { err.message = _("Command not found"); @@ -101,6 +102,10 @@ function trySpawn(argv) throw err; } + // Dummy child watch; we don't want to double-fork internally + // because then we lose the parent-child relationship, which + // can break polkit. See https://bugzilla.redhat.com//show_bug.cgi?id=819275 + GLib.child_watch_add(GLib.PRIORITY_DEFAULT, pid, function () {}, null); } // trySpawnCommandLine: