Subject: bug#5365: 23.1.91; Wrong type argument: keymapp, ("DEAD" . 35215396)

From: Sven Joachim <[email-masked]>
Date: Wed, 13 Jan 2010 20:13:36 +0100

On 2010-01-13 18:27 +0100, Chong Yidong wrote:

> Chong Yidong <[email-masked]> writes:
>
>> Even if that's the case, I'm not sure why Vlocal_function_key_map is
>> getting garbage-collected, tho.
>
> OK, I see one place where this could happen.  In xterm.c:10207:
>
>     terminal->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
>     ...
>     if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
>       {
>         char *vendor = ServerVendor (dpy);
>         /* Temporarily hide the partially initialized terminal */
>         terminal_list = terminal->next_terminal;
>         UNBLOCK_INPUT;
>         terminal->kboard->Vsystem_key_alist
>           = call1 (Qvendor_specific_keysyms,
>                    vendor ? build_string (vendor) : empty_unibyte_string);
>         BLOCK_INPUT;
>         ...
>       }
>
>     terminal->kboard->next_kboard = all_kboards;
>     all_kboards = terminal->kboard;
>
> It's possible that garbage-collection occurs during the call1, when the
> keyboard has not yet been put on the all_kboards linked list.  In that
> case, it will not be protected from garbage collection.
>
> Sven, does the following patch fix the bug?

Apparently, at least I can no longer reproduce the bug.

Sven