]> git.eshelyaron.com Git - emacs.git/commitdiff
(EmacsFrameSetCharSize): Turn off atimers and block
authorGerd Moellmann <gerd@gnu.org>
Wed, 27 Jun 2001 17:16:23 +0000 (17:16 +0000)
committerGerd Moellmann <gerd@gnu.org>
Wed, 27 Jun 2001 17:16:23 +0000 (17:16 +0000)
SIGIO around the code where Xt might wait for a
ConfigureNotifyEvent.
(toplevel): Include <signal.h> and syssignal.h.

src/ChangeLog
src/widget.c

index 2773553d7a5c35032ff74bbae9c8f3ca2f7fdf80..5012ea7441d704380a33bde0b28b3c32c4108964 100644 (file)
@@ -1,5 +1,10 @@
 2001-06-27  Gerd Moellmann  <gerd@gnu.org>
 
+       * widget.c (EmacsFrameSetCharSize): Turn off atimers and block
+       SIGIO around the code where Xt might wait for a
+       ConfigureNotifyEvent.
+       (toplevel): Include <signal.h> and syssignal.h.
+
        * sound.c (vox_configure, vox_close): Turn off atimers
        around ioctls.
 
index a7ba3e3536eadd21138686d7e9f462b4aff8cf9d..b4ec35dcd36b9467757386123e43a5b6113fb8e9 100644 (file)
@@ -51,6 +51,9 @@ Boston, MA 02111-1307, USA.  */
 #include <X11/ShellP.h>
 #include "../lwlib/lwlib.h"
 
+#include <signal.h>
+#include "syssignal.h"
+
 #define max(a, b) ((a) > (b) ? (a) : (b))
 
 /* This sucks: this is the first default that x-faces.el tries.  This won't
@@ -956,6 +959,15 @@ EmacsFrameSetCharSize (widget, columns, rows)
       XtVaSetValues (f->output_data.x->widget,
                     XtNwaitForWm, (XtArgVal) f->output_data.x->wait_for_wm,
                     NULL);
+
+      /* Workaround: When a SIGIO or SIGALRM occurs while Xt is
+        waiting for a ConfigureNotify event (see above), this leads
+        to Xt waiting indefinitely instead of using its default
+        timeout (5 seconds).  */
+      turn_on_atimers (0);
+#ifdef SIGIO
+      sigblock (sigmask (SIGIO));
+#endif
       
       /* Do parents first, otherwise LessTif's geometry management
         enters an infinite loop (as of 2000-01-15).  This is fixed in
@@ -973,7 +985,11 @@ EmacsFrameSetCharSize (widget, columns, rows)
                      XtNheight, (XtArgVal) pixel_height,
                     XtNwidth, (XtArgVal) pixel_width,
                     NULL);
+#ifdef SIGIO
+      sigunblock (sigmask (SIGIO));
+#endif
+      turn_on_atimers (1);
+      
       lw_refigure_widget (f->output_data.x->column_widget, True);
 
       update_hints_inhibit = 0;