From xemacs-m  Fri Apr 11 14:36:11 1997
Received: from venus.Sun.COM (venus.Sun.COM [192.9.25.5])
	by xemacs.org (8.8.5/8.8.5) with SMTP id OAA11816
	for <xemacs-beta@xemacs.org>; Fri, 11 Apr 1997 14:36:10 -0500 (CDT)
Received: from Eng.Sun.COM ([129.146.1.25]) by venus.Sun.COM (SMI-8.6/mail.byaddr) with SMTP id MAA02303 for <xemacs-beta@xemacs.org>; Fri, 11 Apr 1997 12:35:40 -0700
Received: from themom.eng.sun.com by Eng.Sun.COM (SMI-8.6/SMI-5.3)
	id MAA19941; Fri, 11 Apr 1997 12:35:29 -0700
Received: by themom.eng.sun.com (SMI-8.6/SMI-SVR4)
	id MAA28683; Fri, 11 Apr 1997 12:35:16 -0700
Sender: mrb@themom.Eng.Sun.COM
Newsgroups: comp.emacs.xemacs
Cc: XEmacs Beta Test <xemacs-beta@xemacs.org>,
        "Bryan O'Sullivan" <bos@Eng.Sun.COM>
Subject: PATCH: Re: How to kill XEmacs 19.15 in one easy step
References: <dpziv1ulvkz.fsf@Eng.Sun.COM>
From: Martin Buchholz <mrb@Eng.Sun.COM>
Date: 11 Apr 1997 12:35:15 -0700
Message-ID: <ci5iv1t5p58.fsf@eng.sun.com>
Organization: Sun
Lines: 102
X-Newsreader: Gnus v5.4.40/XEmacs 20.1(beta11)
In-Reply-To: Bryan O'Sullivan's message of 10 Apr 1997 08:57:16 -0700
Posted-To: comp.emacs.xemacs

The following message is a courtesy copy of an article
that has been posted to comp.emacs.xemacs as well.

>>>>> "bos" == Sullivan  <Bryan> writes:

bos> (button-release-event-p (allocate-event))

bos> -- 
bos> Let us pray:
bos> What a Great System.
bos> Please Do Not Crash.
bos> ^G^IP@P6

The canonical form of this bug is

(event-type (make-event))

I haven't been fixing enough crashes lately.  This one calls out to
me.  Here's a fix that should also fix the related crash:

(event-properties (make-event))

This change makes 'empty a perfectly valid event type.  It was already 
user-visible, since

(make-event)

==> #<empty-event>


Anyways, (ATTN: STEVE BAUR) here's the patch (against 20.1-b11):

--- src/events.c.old
+++ src/events.c
@@ -63,7 +63,7 @@
 Lisp_Object Qmouse_event_p;
 Lisp_Object Qprocess_event_p;
 
-Lisp_Object Qkey_press, Qbutton_press, Qbutton_release, Qmisc_user;
+Lisp_Object Qkey_press, Qbutton_press, Qbutton_release, Qmisc_user, Qempty;
 Lisp_Object Qascii_character;
 
 /* #### Ad-hoc hack.  Should be part of define_lrecord_implementation */
@@ -966,7 +966,7 @@
     case eval_event:		strcpy (buf, "eval"); 	return;
     case process_event:		strcpy (buf, "process");return;
     case timeout_event:		strcpy (buf, "timeout");return;
-    case empty_event:		strcpy (buf, "EMPTY-EVENT"); return;
+    case empty_event:		strcpy (buf, "empty"); return;
     case dead_event:		strcpy (buf, "DEAD-EVENT");  return;
     default:
       abort ();
@@ -1101,22 +1101,24 @@
 timeout		A timeout has expired.
 eval		This causes a specified action to occur when dispatched.
 magic		Some window-system-specific event has occurred.
+empty		This is an empty event created by make-event.
 */
        (event))
 {
   CHECK_LIVE_EVENT (event);
   switch (XEVENT (event)->event_type)
     {
-    case key_press_event:      return Qkey_press;
-    case button_press_event:   return Qbutton_press;
-    case button_release_event: return Qbutton_release;
-    case misc_user_event:      return Qmisc_user;
-    case pointer_motion_event: return Qmotion;
-    case process_event:        return Qprocess;
-    case timeout_event:        return Qtimeout;
-    case eval_event:           return Qeval;
+    case key_press_event:	return Qkey_press;
+    case button_press_event:	return Qbutton_press;
+    case button_release_event:	return Qbutton_release;
+    case misc_user_event:	return Qmisc_user;
+    case pointer_motion_event:	return Qmotion;
+    case process_event:		return Qprocess;
+    case timeout_event:		return Qtimeout;
+    case eval_event:		return Qeval;
     case magic_event:
-    case magic_eval_event:     return Qmagic;
+    case magic_eval_event:	return Qmagic;
+    case empty_event:		return Qempty;
     default:
       abort ();
       return Qnil;
@@ -1784,6 +1786,10 @@
     case magic_event:
       break;
 
+    case empty_event:
+      RETURN_UNGCPRO (Qnil);
+      break;
+
     default:
       abort ();
       break;                 /* not reached; warning suppression */
@@ -1853,6 +1859,7 @@
   defsymbol (&Qbutton_press, "button-press");
   defsymbol (&Qbutton_release, "button-release");
   defsymbol (&Qmisc_user, "misc-user");
+  defsymbol (&Qempty, "empty");
   defsymbol (&Qascii_character, "ascii-character");
 }
 

