[dev] Infnite loop in drawbar() when using attachbelow and sending windows between monitors

From: Cadey Alicia Ratio <cadey_AT_firemail.cc>
Date: Thu, 04 Jun 2020 06:05:49 -0400

I have found a bit of a peculiar issue when using the [attachbelow][1]
patch. It seems that when you send windows between monitors using it,
it creates a circular linked list that causes the following block of
code to create an infinite loop:

    for (c = m->clients; c; c = c->next) {
            occ |= c->tags;
            if (c->isurgent)
                    urg |= c->tags;
    }

If you end up running into this while dwm is running, you can attach to
the process with gdb and do the following to unstuck it:

    bt full (to verify you are in drawbar())
    set c->next = 0x0

This should unbreak dwm until the next time you attempt to send a window
between monitors.

I have tried to debug this further, but I seem to be reaching the limits
of my C knowledge trying to diagnose and fix the root cause.

This seems to show up most often when there is only one window on the
monitor.

Any advice would be appreciated.

Be well,

Cadey Ratio

---
la budza pu cusku lu
 <<.i ko do snura .i ko do kanro
   .i ko do panpi .i ko do gleki
Received on Thu Jun 04 2020 - 12:05:49 CEST

This archive was generated by hypermail 2.3.0 : Thu Jun 04 2020 - 12:24:07 CEST