Details
-
Bug
-
Resolution: Unresolved
-
P3: Somewhat important
-
None
-
5.6.0, 6.2.4, 6.5.2
-
None
-
X11, Unix, Linux, systemd
Description
When I restart the computer, our application just exits(1). This ommits every serialization, making the application usesless. The problem is that it exits(1). It does not crash, but it does not call the destructors. I simulate the reboot process by killing the session process gracefully (SIGTERM). This is what systemd does on reboot. The processes have then 90s time to terminate until they will receive SIGKILL. We do handle unix signals, but unfortunately the application does not even get to that point, because it exits on the described ICE error.
This is the end of the strace of the program.
... read(7, "", 8) = 0 write(2, "ICE default IO error handler doi"..., 68) = 68 close(19) = 0 munmap(0x7fbabdaf2000, 1512) = 0 close(20) = 0 munmap(0x7fbaa052f000, 139900) = 0 write(9, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0x177c52c, FUTEX_WAIT_PRIVATE, 1, NULL) = 0 futex(0x177c500, FUTEX_WAKE_PRIVATE, 1) = 0 munmap(0x7fbaa2312000, 2126288) = 0 munmap(0x7fbaa210a000, 2126464) = 0 munmap(0x7fbaa1efc000, 2151552) = 0 munmap(0x7fbaa1c63000, 2458264) = 0 munmap(0x7fbaa1a5d000, 2118248) = 0 munmap(0x7fbaa6311000, 2143040) = 0 munmap(0x7fbaaed6e000, 2404424) = 0 munmap(0x7fbaaefba000, 2160216) = 0 munmap(0x7fbab22af000, 2105552) = 0 munmap(0x7fbab1fb7000, 3109328) = 0 munmap(0x7fbab177d000, 2113848) = 0 munmap(0x7fbab1578000, 2113784) = 0 munmap(0x7fbab1171000, 2105472) = 0 munmap(0x7fbab0f6e000, 2105448) = 0 munmap(0x7fbab0b4a000, 2126584) = 0 munmap(0x7fbab0d52000, 2208328) = 0 munmap(0x7fbab06c6000, 2355840) = 0 munmap(0x7fbab043c000, 2658736) = 0 munmap(0x7fbab0031000, 2117912) = 0 close(8) = 0 exit_group(1) = ? +++ exited with 1 +++
(ICE default IO error handler doing an exit())
Using session management only is not a solution since on unix there are systems that have no session manager. So I chose the unix signal way.
Another but related issue is when no session manager is active. I get a similiar error complaining about the X connection that was lost, resulting in an exit(1) too.
Do I have the ability to install error handlers other than just exit(1)? Leaving the eventloop would be sufficient.
System requirements: Desktop PC, X11, a sessoin managing process (unlike openbox or i3)
How to reproduce:
1. Run a qt application.
2. Open a new tty2 trace the systemcalls using "strace `pidof <processname here>`"
3. Open another tty3. Use whatever you want to send SIGTERM to the session process. In my case "killall cinnamon-session".
4. See the cinnamon session terminate and follow the trace on tty2, which produces the output shown above.
Attachments
Issue Links
- relates to
-
QTBUG-58709 Qt does not handle X11 ICE IO errors
-
- Open
-