]> git.eshelyaron.com Git - emacs.git/commitdiff
Trap X errors so that Emacs doesn't die
authorKenichi Handa <handa@m17n.org>
Tue, 13 Apr 1999 00:51:52 +0000 (00:51 +0000)
committerKenichi Handa <handa@m17n.org>
Tue, 13 Apr 1999 00:51:52 +0000 (00:51 +0000)
by them.

src/xterm.c

index 86fd43ac1625e0fb8a7f12a83d5c7848aaa4d050..629e2946d95d6d46532205161599f8ecb31520f7 100644 (file)
@@ -6505,12 +6505,22 @@ x_list_fonts (f, pattern, size, maxnames)
       /* At first, put PATTERN in the cache.  */
 
       BLOCK_INPUT;
+      count = x_catch_errors (dpy);
+
       if (try_XLoadQueryFont)
        {
          XFontStruct *font;
          unsigned long value;
 
          font = XLoadQueryFont (dpy, XSTRING (pattern)->data);
+         if (x_had_errors_p (dpy))
+           {
+             /* This error is perhaps due to insufficient memory on X
+                 server.  Let's just ignore it.  */
+             font = NULL;
+             x_clear_errors (dpy);
+           }
+
          if (font
              && XGetFontProperty (font, XA_FONT, &value))
            {
@@ -6542,10 +6552,21 @@ x_list_fonts (f, pattern, size, maxnames)
        }
 
       if (!try_XLoadQueryFont)
-       /* We try at least 10 fonts because XListFonts will return
-          auto-scaled fonts at the head.  */
-       names = XListFonts (dpy, XSTRING (pattern)->data, max (maxnames, 10),
-                           &num_fonts);
+       {
+         /* We try at least 10 fonts because XListFonts will return
+            auto-scaled fonts at the head.  */
+         names = XListFonts (dpy, XSTRING (pattern)->data, max (maxnames, 10),
+                             &num_fonts);
+         if (x_had_errors_p (dpy))
+           {
+             /* This error is perhaps due to insufficient memory on X
+                 server.  Let's just ignore it.  */
+             names = NULL;
+             x_clear_errors (dpy);
+           }
+       }
+
+      x_uncatch_errors (dpy, count);
       UNBLOCK_INPUT;
 
       if (names)
@@ -6627,8 +6648,17 @@ x_list_fonts (f, pattern, size, maxnames)
              XFontStruct *thisinfo;
 
              BLOCK_INPUT;
+             count = x_catch_errors (dpy);
              thisinfo = XLoadQueryFont (dpy,
                                         XSTRING (XCONS (tem)->car)->data);
+             if (x_had_errors_p (dpy))
+               {
+                 /* This error is perhaps due to insufficient memory on X
+                    server.  Let's just ignore it.  */
+                 thisinfo = NULL;
+                 x_clear_errors (dpy);
+               }
+             x_uncatch_errors (dpy, count);
              UNBLOCK_INPUT;
 
              if (thisinfo)