Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-53678

Application exit(1)s trowing ICE error

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P3: Somewhat important P3: Somewhat important
    • None
    • 5.6.0, 6.2.4, 6.5.2
    • QPA: X11/XCB
    • None
    • X11, Unix, Linux, systemd

      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.

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            Unassigned Unassigned
            manuelschneid3r Manuel Schneider
            Veli-Pekka Heinonen Veli-Pekka Heinonen
            Votes:
            2 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:

                There are no open Gerrit changes