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

From: Dmitry Antipov <[email-masked]>
Date: Fri, 09 Nov 2012 17:27:54 +0400

On 11/09/2012 05:17 PM, Dmitry Antipov wrote:

> 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:

And this, too:

=== modified file 'src/w32term.c'
--- src/w32term.c	2012-10-08 13:46:03 +0000
+++ src/w32term.c	2012-11-09 13:25:41 +0000
@@ -3626,7 +3626,7 @@
    HWND hwnd;
    SCROLLINFO si;
    struct scroll_bar *bar
-    = XSCROLL_BAR (Fmake_vector (make_number (SCROLL_BAR_VEC_SIZE), Qnil));
+    = XSCROLL_BAR (Fmake_vector (make_number (VECSIZE (struct scroll_bar))), Qnil);
    Lisp_Object barobj;

    block_input ();

=== modified file 'src/w32term.h'
--- src/w32term.h	2012-10-17 19:02:44 +0000
+++ src/w32term.h	2012-11-09 13:25:39 +0000
@@ -460,12 +460,6 @@
    Lisp_Object fringe_extended_p;
  };

-/* The number of elements a vector holding a struct scroll_bar needs.  */
-#define SCROLL_BAR_VEC_SIZE					\
-  ((sizeof (struct scroll_bar)					\
-    - sizeof (EMACS_INT) - sizeof (struct Lisp_Vector *))	\
-   / word_size)
-
  /* Turning a lisp vector value into a pointer to a struct scroll_bar.  */
  #define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec))

Dmitry