** Description changed:

+ [ Impact ]
+ 
  If gnome-shell is launched directly instead of launched through gnome-
  session, the process spawning `ibus-daemon` might cause deadlock and
  unable to start the graphics.
  
  Since `ibusManager.js` checks whether service
  `org.freedesktop.IBus.session.GNOME.service` exists. In our case with
  Ubuntu ubiquity, we've turned off `gnome-session.service` so that the
  check failed and gnome-shell spawns `ibus-daemon` after the check.
+ 
+ [ Test case ]
+ 
+  - In a terminal launch
+  - env XDG_RUNTIME_DIR=/tmp/nested-runtime \
+    dbus-run-session gnome-shell --nested --wayland
+  - The shell should start without hanging
+  - Repeat this multiple times and ensure it works reliably
+ 
+ [ Regression potential ]
+ 
+ - Shell (and or its extensions) may not be able to spawn child processes
+ - Applications launched by the shell may inherit the rlimits of mutter
+ 
+ ---
  
  I tried using gdb to gnome-shell and discovered it's hanging in a child
  process spawning `ibus-daemon`, but is still in child_setup of
  `Glib.spawn_async` function:
  
  ```
  root@dell-desktop:/home/oem# cat /tmp/log
  == Stack trace for context 0x5584da793180 ==
  #0   5584dbd2d478 i   resource:///org/gnome/shell/misc/ibusManager.js:119 
(2776aa47bfb0 @ 12)
  #1   5584dbd2d3a8 i   resource:///org/gnome/shell/misc/ibusManager.js:114 
(2776aa47bf60 @ 426)
  #2   5584dbd2d308 i   resource:///org/gnome/shell/misc/ibusManager.js:90 
(2776aa47bec0 @ 162)
  #3   5584dbd2d268 i   self-hosted:689 (34e3dc212650 @ 15)
  ```
  
  which is, in ibusManager.js:
  
  ```
-             const [success_, pid] = GLib.spawn_async(
-                 null, cmdLine, env,
-                 GLib.SpawnFlags.SEARCH_PATH | 
GLib.SpawnFlags.DO_NOT_REAP_CHILD,
-                 () => {
-                     try {
-                         global.context.restore_rlimit_nofile(); # <- here
-                     } catch (err) {
-                     }
-                 }
-             );
+             const [success_, pid] = GLib.spawn_async(
+                 null, cmdLine, env,
+                 GLib.SpawnFlags.SEARCH_PATH | 
GLib.SpawnFlags.DO_NOT_REAP_CHILD,
+                 () => {
+                     try {
+                         global.context.restore_rlimit_nofile(); # <- here
+                     } catch (err) {
+                     }
+                 }
+             );
  ```
  
  Further code tracing found out that the deadlock is not during the
  execution of the function (`restore_rlimit_nofile`) but the access to
  the GObject (probably `global.context`).
  
  Currently my propose to work around this issue is to add a 5 second
  `setTimeout` to the caller of `_spawn` function in `ibusManager.js`.
  
  I've lost debugging information but I can try reproducing the issue and
  give the backtrace from gdb if needed.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2019776

Title:
  If gnome-shell is started directly (instead of through gnome-session),
  it might deadlock with no output to the screen

To manage notifications about this bug go to:
https://bugs.launchpad.net/gnome-shell/+bug/2019776/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to