gmoccapy's _startup_message() (src/emc/usr_intf/gmoccapy/gmoccapy.py:544)
pops a MODAL "Important change(s)" release-notes dialog during __init__ via
dialogs.show_user_message() -> Gtk.Dialog.run(), whenever the preference
hide_startup_messsage is less than the number of release-note messages.
The preference file is created at runtime with hide_startup_messsage = 0,
so on a fresh profile the dialog always shows. Because Gtk.Dialog.run() spins
its own nested main loop, the gmoccapy constructor never returns until a user
clicks the dialog. Under a headless / non-interactive launch (xvfb, CI, the
ui-smoke tests in PR #4054) nobody dismisses it, so gmoccapy hangs at startup.
Reproduce:
- Remove or reset the config's
gmoccapy.pref (so hide_startup_messsage = 0).
- Launch the gmoccapy sim under xvfb.
- py-spy on the gmoccapy process shows it stuck in:
run (gi/overrides/Gtk.py)
show_user_message (gmoccapy/dialogs.py)
_startup_message (gmoccapy.py:560)
init (gmoccapy.py:506)
Impact:
- Any automated / headless launch of gmoccapy with a fresh profile blocks.
- The ui-smoke gmoccapy test must pre-seed or auto-dismiss this dialog.
Possible fixes (for discussion):
- Skip the startup dialog when running non-interactively (e.g. detect no
interactive display, an env var, or a CLI flag).
- Make the dialog non-modal / auto-timeout.
- Show the notice via the in-app notification area instead of a blocking dialog.
gmoccapy's
_startup_message()(src/emc/usr_intf/gmoccapy/gmoccapy.py:544)pops a MODAL "Important change(s)" release-notes dialog during
__init__viadialogs.show_user_message()->Gtk.Dialog.run(), whenever the preferencehide_startup_messsageis less than the number of release-note messages.The preference file is created at runtime with
hide_startup_messsage = 0,so on a fresh profile the dialog always shows. Because
Gtk.Dialog.run()spinsits own nested main loop, the gmoccapy constructor never returns until a user
clicks the dialog. Under a headless / non-interactive launch (xvfb, CI, the
ui-smoke tests in PR #4054) nobody dismisses it, so gmoccapy hangs at startup.
Reproduce:
gmoccapy.pref(sohide_startup_messsage = 0).run (gi/overrides/Gtk.py)
show_user_message (gmoccapy/dialogs.py)
_startup_message (gmoccapy.py:560)
init (gmoccapy.py:506)
Impact:
Possible fixes (for discussion):
interactive display, an env var, or a CLI flag).