<html>
    <head>
      <base href="https://bugzilla.gnome.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - wayland: possible infinite loop in gdkwindow-wayland"
   href="https://bugzilla.gnome.org/show_bug.cgi?id=759299#c5">Comment # 5</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - wayland: possible infinite loop in gdkwindow-wayland"
   href="https://bugzilla.gnome.org/show_bug.cgi?id=759299">bug 759299</a>
              from <span class="vcard"><a href="page.cgi?id=describeuser.html&login=ofourdan%40redhat.com" title="Olivier Fourdan <ofourdan@redhat.com>"> <span class="fn">Olivier Fourdan</span></a>
</span></b>
        <pre>Right.

Actually I think it's even worse than that, because by walking up the transient
tree, we may run into the cycle loop.

And checking for transient depth here won't help, because the window could be
made transient for a parent of lower depth or hight depth.

E.g.


[ 0 ] -> [ 1 ] -> [ 2 ]
          /        /
    /----/   /----/
   /        /
[ 0 ] -> [ 1 ]

In this case, this is fine 0 < 1

But:

[ 0 ] -> [ 1 ] -> [ 2 ]
   \                 \
    \------------\    \------------\
                  \                 \
[ 0 ] -> [ 1 ]...[ 2 ] -> [ 3 ] -> [ 4 ] 

In this case, the next depth in the tree is actually lesser (or equal) than the
current one, and yet this does not mean there is a loop, so testing the
transient depth is meaningless here precisely because we are adjusting its
value.

Beside, if we can detect a loop in the set_transient() function and refuse to
apply the transient relationship in such a case, we can guarantee that no loop
is created and we don't need the transient depth at all.

Means we do all the job in set_transient() (possibly using a more costly
algorithm) but we don't have to do it again every time we walk up the transient
list (and this is done very often, for example
gdk_wayland_window_get_fake_root_coords() is invoked at each pointer move from
pointer_handle_motion()).</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>