(get_keyelt): Temporarily inhibit GC while evaluating
authorGerd Moellmann <gerd@gnu.org>
Tue, 4 Jul 2000 12:08:25 +0000 (12:08 +0000)
committerGerd Moellmann <gerd@gnu.org>
Tue, 4 Jul 2000 12:08:25 +0000 (12:08 +0000)
a menu filter.

src/ChangeLog
src/keymap.c

index 82730f0..f3f521a 100644 (file)
@@ -1,3 +1,8 @@
+2000-07-04  Gerd Moellmann  <gerd@gnu.org>
+
+       * keymap.c (get_keyelt): Temporarily inhibit GC while evaluating
+       a menu filter.
+
 2000-07-04  Kenichi Handa  <handa@etl.go.jp>
 
        * composite.h (make_composition_value_copy): Extern it.
index 11d8ab8..414de7b 100644 (file)
@@ -592,14 +592,18 @@ get_keyelt (object, autoload)
 
              /* If there's a `:filter FILTER', apply FILTER to the
                 menu-item's definition to get the real definition to
-                use.  */
+                use.  Temporarily inhibit GC while evaluating FILTER,
+                because not functions calling get_keyelt are prepared
+                for a GC.  */
              for (; CONSP (tem) && CONSP (XCDR (tem)); tem = XCDR (tem))
                if (EQ (XCAR (tem), QCfilter))
                  {
+                   int count = inhibit_garbage_collection ();
                    Lisp_Object filter;
                    filter = XCAR (XCDR (tem));
                    filter = list2 (filter, list2 (Qquote, object));
                    object = menu_item_eval_property (filter);
+                   unbind_to (count, Qnil);
                    break;
                  }
            }