Subject: bug#12839: 24.3.50; Emacs aborts in GC

From: Eli Zaretskii <[email-masked]>
Date: Fri, 09 Nov 2012 16:16:49 +0200

> Date: Fri, 09 Nov 2012 17:17:26 +0400
> From: Dmitry Antipov <[email-masked]>
> CC: [email-masked]
> 
> On 11/09/2012 11:24 AM, Eli Zaretskii wrote:
> 
> > I'd be happy to try debugging this myself, but I need guidance
> > regarding some basics of what you changed recently in this area.
> > Alternatively, tell me what to do in GDB, and I will post the results.
> > I'm quite fluent with GDB, and reproducing this is extremely easy :-(.
> 
> Try this:
> 
> === modified file 'src/w32term.h'
> --- src/w32term.h	2012-10-17 19:02:44 +0000
> +++ src/w32term.h	2012-11-09 13:13:43 +0000
> @@ -414,10 +414,8 @@
>      vector.  */
> 
>   struct scroll_bar {
> -
> -  /* These fields are shared by all vectors.  */
> -  EMACS_INT size_from_Lisp_Vector_struct;
> -  struct Lisp_Vector *next_from_Lisp_Vector_struct;
> +  /* This field is shared by all vectors.  */
> +  struct vectorlike_header header;
> 
>     /* The window we're a scroll bar for.  */
>     Lisp_Object window;

I applied this together with the other patch you sent, and the 2
crashes I saw earlier do not happen anymore.  Thanks.

> This is Windows-specific and obviously wrong since sizeof (struct vectorlike_header)
> is now _less than_ sizeof (EMACS_INT) + sizeof (struct Lisp_Vector *).

If it's wrong, why use it?  What would be the right change?