https://bugs.kde.org/show_bug.cgi?id=438097

--- Comment #32 from Ash Blake <telepath...@tutanota.com> ---
Created attachment 141875
  --> https://bugs.kde.org/attachment.cgi?id=141875&action=edit
A Python script that parses strace output for FD information

I wrote a script to parse strace output and abbreviate it, displaying only
close() calls and recvmsg() calls, but filtered by cmsg_type=SCM_RIGHTS and
abbreviated so that only the cmsg_data part containing newly received file
descriptors is visible.

After terminating the script with Ctrl+C, it will display all the file
descriptors that have been received by the KWin process, but not closed.

This is the output in a bug-free situation (the reproducing program was ran
with a burst size of 20 and window lifetime of 100ms, which does not trigger
the bug)

    $ sudo strace -e trace=recvmsg,close -p `pidof kwin_wayland` 2>&1 | python
process_strace.py
    close(5670)                             = 0
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670],...) = 84
    recvmsg(48,...,cmsg_data=[5670],...) = 8
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    recvmsg(44,...,cmsg_data=[5670],...) = 152
    close(5670)                             = 0
    recvmsg(48,...,cmsg_data=[5670, 5675],...) = 16
    ^CThese descriptors were left open:
    5670, 5675

The mentioned descriptors have been however closed shortly after.


This is the output with also 20 windows, but a lifetime of 16ms:
    $ sudo strace -e trace=recvmsg,close -p `pidof kwin_wayland` 2>&1 | python
process_strace.py
    recvmsg(44,...,cmsg_data=[5696],...) = 152
    close(5696)                             = 0
    recvmsg(48,...,cmsg_data=[5696, 5697],...) = 16
    recvmsg(44,...,cmsg_data=[5696],...) = 152
    close(5696)                             = 0
    recvmsg(48,...,cmsg_data=[5696, 5697],...) = 16
    recvmsg(44,...,cmsg_data=[5700],...) = 152
    close(5700)                             = 0
    recvmsg(48,...,cmsg_data=[5700, 5701],...) = 16
    recvmsg(44,...,cmsg_data=[5700],...) = 152
    close(5700)                             = 0
    recvmsg(44,...,cmsg_data=[5700],...) = 152
    close(5700)                             = 0
    recvmsg(48,...,cmsg_data=[5700, 5701],...) = 16
    recvmsg(44,...,cmsg_data=[5702],...) = 152
    close(5702)                             = 0
    recvmsg(44,...,cmsg_data=[5702],...) = 152
    close(5702)                             = 0
    recvmsg(48,...,cmsg_data=[5702, 5703],...) = 16
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    close(5704)                             = 0
    recvmsg(44,...,cmsg_data=[5704],...) = 152
    recvmsg(48,...,cmsg_data=[5705, 5706],...) = 16
    close(5704)                             = 0
    ^CThese descriptors were left open:
    5696, 5697, 5700, 5701, 5702, 5703, 5705, 5706


All of these descriptors were open after waiting a few seconds and checking,
and are still open while I'm typing this.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to