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

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

Btw, curiously, it never crashes during dumping nor when compiling
Lisp files, although both GC and vectors are used during these.  So
this sounds like it's related to something that is only used during
interactive sessions.

As another data point, I tried debugging temacs and got this:

  (gdb) r -Q
  Starting program: D:\gnu\bzr\emacs\trunk\src\oo\i386\temacs.exe -Q
  [New Thread 8180.0x1678]
  [New Thread 8180.0x1820]
  Loading loadup.el (source)...
  Using load-path (../lisp)
  Loading emacs-lisp/byte-run...
  Loading emacs-lisp/byte-run...done
  Loading emacs-lisp/backquote...
  Loading emacs-lisp/backquote...done
  Loading subr...
  Loading subr...done
  [... rest of loading omitted ...]
  Loading tooltip...
  Loading tooltip...done
  Finding pointers to doc strings...
  Finding pointers to doc strings...done
  Pure-hashed: 22172 strings, 3127 vectors, 36397 conses, 2832 bytecodes, 85 others
  [New Thread 8180.0x15d4]

  Program received signal SIGSEGV, Segmentation fault.
  0x01130f12 in print_object (obj=38, printcharfun=55859250, escapeflag=1)
      at print.c:1669
  1669                    print_object (XCAR (obj), printcharfun, escapeflag);
  (gdb) l
  1664                        strout ("...", 3, 3, printcharfun);
  1665                        goto end_of_list;
  1666                      }
  1667
  1668                    i++;
  1669                    print_object (XCAR (obj), printcharfun, escapeflag);
  1670
  1671                    obj = XCDR (obj);
  1672                    if (!(i & 1))
  1673                      halftail = XCDR (halftail);
  (gdb) info threads
    Id   Target Id         Frame
    3    Thread 8180.0x15d4 0x7c90e514 in ntdll!LdrAccessResource ()
     from C:\WINDOWS\system32\ntdll.dll
    2    Thread 8180.0x1820 0x7c90e514 in ntdll!LdrAccessResource ()
     from C:\WINDOWS\system32\ntdll.dll
  * 1    Thread 8180.0x1678 0x01130f12 in print_object (obj=38,
      printcharfun=55859250, escapeflag=1) at print.c:1669
  (gdb) bt
  #0  0x01130f12 in print_object (obj=38, printcharfun=55859250, escapeflag=1)
      at print.c:1669
  #1  0x01132796 in print_object (obj=60452533, printcharfun=55859250,
      escapeflag=1) at print.c:1985
  #2  0x0112e1d1 in print (obj=60452533, printcharfun=55859250, escapeflag=1)
      at print.c:1103
  #3  0x0112b93b in Fprin1 (object=60452533, printcharfun=55859250)
      at print.c:560
  #4  0x0112dc11 in print_error_message (data=60626454, stream=55859250,
      context=0x82fcb0 "", caller=58331306) at print.c:915
  #5  0x0109252f in cmd_error_internal (data=60626454, context=0x82fcb0 "")
      at keyboard.c:1118
  #6  0x010922b0 in cmd_error (data=60626454) at keyboard.c:1054
  #7  0x01010fc5 in internal_condition_case (bfun=0x1092980 <command_loop_1>,
      handlers=55909570, hfun=0x10921c0 <cmd_error>) at eval.c:1278
  #8  0x0109260c in command_loop_2 (ignore=55859226) at keyboard.c:1167
  #9  0x01010a23 in internal_catch (tag=55899426,
      func=0x10925e9 <command_loop_2>, arg=55859226) at eval.c:1059
  #10 0x010925c4 in command_loop () at keyboard.c:1146
  #11 0x01091b91 in recursive_edit_1 () at keyboard.c:778
  #12 0x01091eb3 in Frecursive_edit () at keyboard.c:842
  #13 0x01002863 in main (argc=2, argv=0xa427c8) at emacs.c:1564
  (gdb) frame 6
  #6  0x010922b0 in cmd_error (data=60626454) at keyboard.c:1054
  1054      cmd_error_internal (data, macroerror);
  (gdb) pp data
  (wrong-type-argument window-configuration-p [#<frame temacs@HOME-C4E4A596F7 03847E70> #<window 3 on *scratch*> #<buffer *scratch*> nil nil #<window 3 on *scratch*> nil [[#<window 3 on *scratch*> #<buffer *scratch*> #<marker at 1 in *scratch*> #<marker at 192 in *scratch*> #<marker in no buffer> 0 3 84 34 1.0 ...] [#<window 4 on  *Minibuf-1*> #<buffer  *Minibuf-0*> #<marker at 1 in  *Echo Area 1*> #<marker at 1 in  *Minibuf-0*> #<marker in no buffer> 0 37 84 1 1.0 ...]] 20 (
  Program received signal SIGSEGV, Segmentation fault.
  0x01130f12 in print_object (obj=38, printcharfun=55978898, escapeflag=1)
      at print.c:1669
  1669                    print_object (XCAR (obj), printcharfun, escapeflag);
  The program being debugged was signaled while in a function called from GDB.
  GDB remains in the frame where the signal was received.
  To change this behavior use "set unwindonsignal on".
  Evaluation of the expression containing the function
  (safe_debug_print) will be abandoned.
  When the function is done executing, GDB will silently stop.

(The SIGSEGV caused by 'pp' was expected, but it produces the contents
of the error object much more easily, so it was worth the risk.)

This looks like Emacs was signaling an error because some variable
that was supposed to be a window configuration wasn't, or some window
stored in that configuration wasn't a valid window object.

HTH