x11: Trap error when getting CRTC info
authorJonas Ådahl <jadahl@gmail.com>
Wed, 17 Nov 2021 10:14:00 +0000 (11:14 +0100)
committerJonas Ådahl <jadahl@gmail.com>
Wed, 17 Nov 2021 10:15:40 +0000 (11:15 +0100)
This should fix a race happening when RANDR changes quickly, e.g. during
unit testing where tests change monitor configurations rapidly.

gdk/x11/gdkscreen-x11.c

index e84645bf176338d897171c0892110ba6775ed352..bde0b7dd546c9006b4c915afab87d7ddfc8b575f 100644 (file)
@@ -492,9 +492,18 @@ init_randr15 (GdkX11Screen *x11_screen)
 
       if (output_info->crtc)
         {
-          XRRCrtcInfo *crtc = XRRGetCrtcInfo (x11_screen->xdisplay, resources, output_info->crtc);
+          XRRCrtcInfo *crtc;
           int j;
 
+          gdk_x11_display_error_trap_push (display);
+          crtc = XRRGetCrtcInfo (x11_screen->xdisplay, resources,
+                                 output_info->crtc);
+          if (gdk_x11_display_error_trap_pop (display))
+            {
+              XRRFreeOutputInfo (output_info);
+              continue;
+            }
+
           for (j = 0; j < resources->nmode; j++)
             {
               XRRModeInfo *xmode = &resources->modes[j];