changeset 24618:b18f51ec1b6c

Trap X errors so that Emacs doesn't die by them.
author Kenichi Handa <handa@m17n.org>
date Tue, 13 Apr 1999 00:51:52 +0000
parents a9d05d95717d
children 6057f7a48050
files src/xterm.c
diffstat 1 files changed, 34 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Mon Apr 12 18:25:26 1999 +0000
+++ b/src/xterm.c	Tue Apr 13 00:51:52 1999 +0000
@@ -6505,12 +6505,22 @@
       /* 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 @@
 	}
 
       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 @@
 	      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)