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

Application exit(1)s trowing ICE error

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • P3: Somewhat important
    • None
    • 5.6.0, 6.2.4, 6.5.2
    • QPA: X11/XCB
    • 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

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

          Activity

            People

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

              Dates

                Created:
                Updated:

                Gerrit Reviews

                  There are no open Gerrit changes