Subject: bug#17167: closed (Re: bug#17168: 24.3.50; Segfault at mark_object)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 07 Apr 2014 18:41:11 +0000

Your bug report

#17168: 24.3.50; Segfault at mark_object

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
17168: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17168
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#17168: 24.3.50; Segfault at mark_object
From: Stefan Monnier <[email-masked]>
To: Daniel Colascione <[email-masked]>
Cc: Dmitry Antipov <[email-masked]>, [email-masked]
Date: Mon, 07 Apr 2014 12:28:20 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

> Anyway, I'd like to get a fix into emacs-24 soon so we can make sure
> we've fixed the GC bug.

I installed a fix into emacs-24, which lets all symbols be uninterned.

> Are you vetoing the general approach used in this patch?

No: I think disallowing unintern is a good idea, but not for emacs-24.

Indeed, as it turns out, the only non-pure objects referenced from pure
space are symbols and distinguishing uninterned from interned reduces
the number of such "pinned" objects from about 10K to about 250.

Rather than scan all symbols to find the pinned ones, the code
I installed into emacs-24 keeps a pointer to the first symbol_block
that contains a pinned symbol.  This way we only scan about 15K symbols
at the beginning of every GC cycle to mark those 10K pinned symbols.
Compared to keeping a vector of 10K object, this seems like
a good tradeoff.

For trunk, we could disallow uninterning pinned symbols, at which point
it's worth the trouble to build a vector of those 250 remaining
pinned symbols.

        Stefan

Subject: 24.3.50; Segfault at mark_object
From: Nicolas Richard <[email-masked]>
To: [email-masked]
Date: Wed, 02 Apr 2014 09:44:03 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

This happened while I was away.

Program received signal SIGSEGV, Segmentation fault.
mark_object (arg=194) at alloc.c:6127
6127		if (ptr->gcmarkbit)
#0  mark_object (arg=194) at alloc.c:6127
#1  0x081b2a14 in mark_vectorlike (ptr=0xb9b0db0) at alloc.c:5785
#2  0x081b30df in mark_object (arg=194710965) at alloc.c:6117
#3  0x081b3116 in mark_object (arg=188747058) at alloc.c:6131
#4  0x081b1434 in mark_maybe_pointer (p=0xb400d30) at alloc.c:4563
#5  0x081b1484 in mark_memory (start=0xbfffd08c, end=0xbfffebdc) at alloc.c:4638
#6  0x081b14d1 in mark_stack () at alloc.c:4872
#7  0x081b231c in Fgarbage_collect () at alloc.c:5545
#8  0x0814bbb6 in maybe_gc () at lisp.h:4518
#9  0x081cdd73 in Ffuncall (nargs=2, args=0xbfffd2d0) at eval.c:2766
#10 0x081cbb68 in internal_condition_case_n (bfun=0x81cdcbb <Ffuncall>, nargs=2, args=0xbfffd2d0, handlers=139298778, hfun=0x8073814 <safe_eval_handler>) at eval.c:1436
#11 0x0807392c in safe_call (nargs=2, func=141642493) at xdisp.c:2609
#12 0x08073969 in safe_call1 (fn=141642493, arg=139298754) at xdisp.c:2625
#13 0x080875a8 in prepare_menu_bars () at xdisp.c:11512
#14 0x0808ab42 in redisplay_internal () at xdisp.c:13403
#15 0x08089e98 in redisplay () at xdisp.c:13022
#16 0x08153013 in read_char (commandflag=1, map=218382190, prev_event=139298754, used_mouse_menu=0xbfffe8a3, end_time=0x0) at keyboard.c:2567
#17 0x0815d730 in read_key_sequence (keybuf=0xbfffe9c0, bufsize=30, prompt=139298754, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false)
    at keyboard.c:9079
#18 0x08151016 in command_loop_1 () at keyboard.c:1449
#19 0x081cb7e6 in internal_condition_case (bfun=0x8150cd3 <command_loop_1>, handlers=139331834, hfun=0x81506a9 <cmd_error>) at eval.c:1354
#20 0x08150a6f in command_loop_2 (ignore=139298754) at keyboard.c:1174
#21 0x081cb16e in internal_catch (tag=139329882, func=0x8150a4b <command_loop_2>, arg=139298754) at eval.c:1118
#22 0x08150a29 in command_loop () at keyboard.c:1153
#23 0x08150345 in recursive_edit_1 () at keyboard.c:777
#24 0x08150481 in Frecursive_edit () at keyboard.c:845
#25 0x0814e8b1 in main (argc=2, argv=0xbfffecd4) at emacs.c:1646

Lisp Backtrace:
"Automatic GC" (0x84c678c)
0x8714af8 PVEC_COMPILED
"redisplay_internal (C function)" (0x84c678c)
#0  mark_object (arg=194) at alloc.c:6127
        ptr = 0xc0
        ptrx = 0xbfffcea8
        obj = 192
        cdr_count = 0
#1  0x081b2a14 in mark_vectorlike (ptr=0xb9b0db0) at alloc.c:5785
        size = 36
        i = 14
#2  0x081b30df in mark_object (arg=194710965) at alloc.c:6117
        ptr = 0xb9b0db0
        pvectype = 0
        obj = 194710960
        cdr_count = 0
#3  0x081b3116 in mark_object (arg=188747058) at alloc.c:6131
        ptr = 0xb400d30
        ptrx = 0x12
        obj = 188747056
        cdr_count = 0
#4  0x081b1434 in mark_maybe_pointer (p=0xb400d30) at alloc.c:4563
        obj = 188747058
        m = 0xb709250
#5  0x081b1484 in mark_memory (start=0xbfffd08c, end=0xbfffebdc) at alloc.c:4638
        p = 0xb400d30
        pp = 0xbfffde90
        i = 0
#6  0x081b14d1 in mark_stack () at alloc.c:4872
        end = 0xbfffd08c
#7  0x081b231c in Fgarbage_collect () at alloc.c:5545
        nextb = 0x0
        stack_top_variable = 0 '\000'
        i = 1617
        message_p = true
        count = 7
        start = {
          tv_sec = 1396375514, 
          tv_nsec = 188980653
        }
        retval = 139298754
        tot_before = 0
#8  0x0814bbb6 in maybe_gc () at lisp.h:4518
No locals.
#9  0x081cdd73 in Ffuncall (nargs=2, args=0xbfffd2d0) at eval.c:2766
        fun = 139319504
        original_fun = 139319297
        funcar = 0
        numargs = 1
        lisp_numargs = -1073753480
        val = 138917188
        internal_args = 0x0
        i = 5
#10 0x081cbb68 in internal_condition_case_n (bfun=0x81cdcbb <Ffuncall>, nargs=2, args=0xbfffd2d0, handlers=139298778, hfun=0x8073814 <safe_eval_handler>) at eval.c:1436
        val = 139352440
        c = 0x84e6500
#11 0x0807392c in safe_call (nargs=2, func=141642493) at xdisp.c:2609
        i = 2
        count = 5
        gcpro1 = {
          next = 0x8714afd, 
          var = 0xffd340, 
          nvars = 2
        }
        ap = 0xbfffd33c "H\323\377\277\005\262\024\bH\230U\b\310\323\377\277\250u\b\b\375Jq\b\302\207M\b\320\330M\b"
        args = 0xbfffd2d0
        val = 136011655
#12 0x08073969 in safe_call1 (fn=141642493, arg=139298754) at xdisp.c:2625
No locals.
#13 0x080875a8 in prepare_menu_bars () at xdisp.c:11512
        windows = 139298754
        all_windows = false
        some_windows = true
        gcpro1 = {
          next = 0xa0e9c28, 
          var = 0x1, 
          nvars = 1
        }
        gcpro2 = {
          next = 0x0, 
          var = 0xbfffd378, 
          nvars = 134576184
        }
        tooltip_frame = 139298754
#14 0x0808ab42 in redisplay_internal () at xdisp.c:13403
        w = 0xb75b720
        sw = 0xb75b720
        fr = 0x84e46d0
        pending = 0
        must_finish = false
        match_p = false
        tlbufpos = {
          charpos = 136133708, 
          bytepos = 139298754
        }
        tlendpos = {
          charpos = 141207980, 
          bytepos = -1073748696
        }
        number_of_visible_frames = 1
        count = 2
        sf = 0x84e46d0
        polling_stopped_here = 0
        tail = 139298754
        frame = 139347669
        consider_all_windows_p = 8
        update_miniwindow_p = false
#15 0x08089e98 in redisplay () at xdisp.c:13022
No locals.
#16 0x08153013 in read_char (commandflag=1, map=218382190, prev_event=139298754, used_mouse_menu=0xbfffe8a3, end_time=0x0) at keyboard.c:2567
        echo_current = false
        c = 139298754
        jmpcount = -1073748040
        local_getcjmp = {{
            __jmpbuf = {-1073748232, 136044005, 139319504, 0, -1073748264, 136011529}, 
            __mask_was_saved = 141081056, 
            __saved_mask = {
              __val = {141081056, 3221219032, 136133786, 139298754, 139319504, 141081056, 141431720, 139360971, 0, 3221219128, 135679500, 141431722, 139298778, 3221218816, 4294967295, 192, 0, 
                139298754, 3221219080, 135571235, 218382182, 3221219128, 135982083, 218382182, 218382174, 141431722, 141503502, 139298754, 139298754, 2, 139298754, 222500864}
            }
          }}
        save_jump = {{
            __jmpbuf = {56, 139360971, 162623043, 169126963, 177160939, 206411387}, 
            __mask_was_saved = 216942387, 
            __saved_mask = {
              __val = {3067047979, 3068297204, 3068298304, 0, 28, 3067056153, 198911504, 178059944, 28, 4, 211656168, 3221214072, 3221218920, 135574114, 139319504, 6, 3067056073, 0, 0, 
                139319504, 3221218952, 135574114, 139319504, 6, 3221218984, 136011027, 139319509, 139319504, 3221218968, 135574303, 139319509, 139321778}
            }
          }}
        tem = 139298754
        save = 142664326
        previous_echo_area_message = 139298754
        also_record = 139298754
        reread = false
        gcpro1 = {
          next = 0x84de1b2, 
          var = 0xbfffe6f8, 
          nvars = 136044861
        }
        gcpro2 = {
          next = 0x2fc, 
          var = 0x1000006, 
          nvars = 0
        }
        polling_stopped_here = false
        orig_kboard = 0x889e340
#17 0x0815d730 in read_key_sequence (keybuf=0xbfffe9c0, bufsize=30, prompt=139298754, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false)
    at keyboard.c:9079
        interrupted_kboard = 0x889e340
        interrupted_frame = 0x84e46d0
        key = 139319509
        used_mouse_menu = false
        echo_local_start = 0
        last_real_key_start = 0
        keys_local_start = 0
        new_binding = 139347669
        count = 2
        t = 0
        echo_start = 0
        keys_start = 0
        current_binding = 218382190
        first_event = 139298754
        first_unbound = 31
        mock_input = 0
        fkey = {
          parent = 140966150, 
          map = 140966150, 
          start = 0, 
          end = 0
        }
        keytran = {
          parent = 139286286, 
          map = 139286286, 
          start = 0, 
          end = 0
        }
        indec = {
          parent = 140966158, 
          map = 140966158, 
          start = 0, 
          end = 0
        }
        shift_translated = false
        delayed_switch_frame = 139298754
        original_uppercase = 134622171
        original_uppercase_position = -1
        dummyflag = false
        starting_buffer = 0x84dd8d0
        fake_prefixed_keys = 139298754
        gcpro1 = {
          next = 0x84d87c2, 
          var = 0xbfffe8c8, 
          nvars = 136011655
        }
#18 0x08151016 in command_loop_1 () at keyboard.c:1449
        cmd = 141463658
        keybuf = {96, 12, 137180145, 139298754, 139370802, 139298754, 4, 139298754, 141445706, 0, -1073747448, 135596160, 139329858, 210791238, 137180145, 139298754, 197184288, 0, -1073747352, 
          135595989, 210791238, -1073747409, -1073747384, 136104088, 2, 193733073, -1227911223, 0, 1919251558, 1797271584}
        i = 2
        prev_modiff = 11
        prev_buffer = 0x84dd8d0
        already_adjusted = false
#19 0x081cb7e6 in internal_condition_case (bfun=0x8150cd3 <command_loop_1>, handlers=139331834, hfun=0x81506a9 <cmd_error>) at eval.c:1354
        val = 193733073
        c = 0x84e6428
#20 0x08150a6f in command_loop_2 (ignore=139298754) at keyboard.c:1174
        val = 0
#21 0x081cb16e in internal_catch (tag=139329882, func=0x8150a4b <command_loop_2>, arg=139298754) at eval.c:1118
        val = 139298754
        c = 0x88a0570
#22 0x08150a29 in command_loop () at keyboard.c:1153
No locals.
#23 0x08150345 in recursive_edit_1 () at keyboard.c:777
        count = 1
        val = -1073747128
#24 0x08150481 in Frecursive_edit () at keyboard.c:845
        count = 0
        buffer = 139298754
#25 0x0814e8b1 in main (argc=2, argv=0xbfffecd4) at emacs.c:1646
        dummy = 2
        stack_bottom_variable = 0 '\000'
        do_initial_setlocale = true
        dumping = false
        skip_args = 1
        rlim = {
          rlim_cur = 8388608, 
          rlim_max = 18446744073709551615
        }
        no_loadup = false
        junk = 0x0
        dname_arg = 0x0
        ch_to_dir = 0x0
        original_pwd = 0x0

Lisp Backtrace:
"Automatic GC" (0x84c678c)
0x8714af8 PVEC_COMPILED
"redisplay_internal (C function)" (0x84c678c)
#0  mark_object (arg=194) at alloc.c:6127
#1  0x081b2a14 in mark_vectorlike (ptr=0xb9b0db0) at alloc.c:5785
#2  0x081b30df in mark_object (arg=194710965) at alloc.c:6117
#3  0x081b3116 in mark_object (arg=188747058) at alloc.c:6131
#4  0x081b1434 in mark_maybe_pointer (p=0xb400d30) at alloc.c:4563
#5  0x081b1484 in mark_memory (start=0xbfffd08c, end=0xbfffebdc) at alloc.c:4638
#6  0x081b14d1 in mark_stack () at alloc.c:4872
#7  0x081b231c in Fgarbage_collect () at alloc.c:5545
#8  0x0814bbb6 in maybe_gc () at lisp.h:4518
#9  0x081cdd73 in Ffuncall (nargs=2, args=0xbfffd2d0) at eval.c:2766
#10 0x081cbb68 in internal_condition_case_n (bfun=0x81cdcbb <Ffuncall>, nargs=2, args=0xbfffd2d0, handlers=139298778, hfun=0x8073814 <safe_eval_handler>) at eval.c:1436
#11 0x0807392c in safe_call (nargs=2, func=141642493) at xdisp.c:2609
#12 0x08073969 in safe_call1 (fn=141642493, arg=139298754) at xdisp.c:2625
#13 0x080875a8 in prepare_menu_bars () at xdisp.c:11512
#14 0x0808ab42 in redisplay_internal () at xdisp.c:13403
#15 0x08089e98 in redisplay () at xdisp.c:13022
#16 0x08153013 in read_char (commandflag=1, map=218382190, prev_event=139298754, used_mouse_menu=0xbfffe8a3, end_time=0x0) at keyboard.c:2567
#17 0x0815d730 in read_key_sequence (keybuf=0xbfffe9c0, bufsize=30, prompt=139298754, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false)
    at keyboard.c:9079
#18 0x08151016 in command_loop_1 () at keyboard.c:1449
#19 0x081cb7e6 in internal_condition_case (bfun=0x8150cd3 <command_loop_1>, handlers=139331834, hfun=0x81506a9 <cmd_error>) at eval.c:1354
#20 0x08150a6f in command_loop_2 (ignore=139298754) at keyboard.c:1174
#21 0x081cb16e in internal_catch (tag=139329882, func=0x8150a4b <command_loop_2>, arg=139298754) at eval.c:1118
#22 0x08150a29 in command_loop () at keyboard.c:1153
#23 0x08150345 in recursive_edit_1 () at keyboard.c:777
#24 0x08150481 in Frecursive_edit () at keyboard.c:845
#25 0x0814e8b1 in main (argc=2, argv=0xbfffecd4) at emacs.c:1646

Lisp Backtrace:
"Automatic GC" (0x84c678c)
0x8714af8 PVEC_COMPILED
"redisplay_internal (C function)" (0x84c678c)

In GNU Emacs 24.3.50.7 (i686-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2014-03-27 on geodiff-mac3
Windowing system distributor `The X.Org Foundation', version 11.0.11304000
System Description:	Gentoo Base System release 2.2

Configured using:
 `configure --with-x-toolkit=lucid 'CFLAGS= -O0 -g3''

Important settings:
  value of $LANG: fr_FR.UTF-8
  locale-coding-system: utf-8-unix

-- 
Nico.