emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Emacs 23.1.93 pretest


From: Eli Zaretskii
Subject: Re: Emacs 23.1.93 pretest
Date: Sat, 27 Feb 2010 12:21:03 +0200

> Date: Sat, 27 Feb 2010 11:05:01 +0200
> From: Eli Zaretskii <address@hidden>
> Cc: address@hidden
> 
> > From: Chong Yidong <address@hidden>
> > Date: Fri, 26 Feb 2010 22:40:05 -0500
> > 
> > Emacs pretest 23.1.93 is now available for download via FTP, at the
> > following location:
> > 
> >   ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-23.1.93.tar.gz
> > 
> > The xdelta against the Emacs 23.1.92 pretest is here:
> > 
> >   ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-23.1.92-23.1.93.xdelta
> > 
> > This is the fourth pretest for what will be the Emacs 23.2 release.
> 
> It crashes for me on MS-Windows, while loading my desktop file.  I'm
> trying to debug this.

The problem is this line from my desktop file:

  (setq regexp-search-ring '("[^]$" "\\bmac" "\\`n" "\\`m" "\\\\`ma" "\\. [^ ]" 
"^`" "^\\\\" "/[A-Za-z] " "/. ." " $" "/.*ş" "/.*\naba/f" "^" "/.*H" "[[^ 
]*[^]] "))

There's a Latin-2 character `ş' there.  If I delete the "/.*ş" part of
the regexp-search-ring, Emacs starts correctly.  Emacs 23.1.92 loads
the same desktop file without any trouble, so this is a regression.

From this and other symptoms (see below), it looks like the emacs-mule
decoding is broken in this pretest.  For example, visiting the
offending desktop file with the Latin-2 character in place causes many
characters following this Latin-2 character to disappear from display,
as if they didn't exist in the file.  Killing the buffer and visiting
the file again magically restores the characters that disappeared.

I cannot produce a GDB backtrace: I could not find a way of
reproducing the crash under GDB.  All I get is a weird
wrong-type-argument error:

   Debugger entered--Lisp error: (wrong-type-argument symbolp (quote 
((tab-width . 8) (buffer-file-coding-system . iso-latin-1-unix) 
(case-fold-search . t))))

But I think this is because the failure to decode the desktop file
correctly causes Emacs to try evaluating a butchered expression.

FWIW, here's the backtrace of the crash produced by Dr MinGW, a GIT
debugger that pops up when Emacs crashes.  Note that it crashes in
decode_coding_emacs_mule, yet another sign that this is the culprit.

    emacs.exe caused an Access Violation at location 0112b000 in module 
emacs.exe Reading from location 03194000.

    Registers:
    eax=03194000 ebx=00000000 ecx=03194000 edx=00002c50 esi=00000000 
edi=0081572c
    eip=0112b000 esp=0080a550 ebp=0080a5b8 iopl=0         nv up ei ng nz ac pe 
cy
    cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             
efl=00000293

    Call stack:
    0112B000  emacs.exe:0112B000  decode_coding_emacs_mule  coding.c:2497

            ...
            c = byte_after_cr, byte_after_cr = -1;
                  else
    >       ONE_MORE_BYTE (c);

                  if (c < 0 || c == 0x80)
            ...

    01134F4F  emacs.exe:01134F4F  decode_coding  coding.c:7158

            ...
                  coding->charbuf_used = carryover;
                  (*(coding->decoder)) (coding);
    >             coding_set_destination (coding);
                  carryover = produce_chars (coding, translation_table, 0);
                  if (coding->annotated)
            ...

    01138823  emacs.exe:01138823  decode_coding_gap  coding.c:7666

            ...
              current_buffer->text->inhibit_shrinking = 1;
              decode_coding (coding);
    >         current_buffer->text->inhibit_shrinking = 0;

              attrs = CODING_ID_ATTRS (coding->id);
            ...

    0104E7B8  emacs.exe:0104E7B8  Finsert_file_contents  fileio.c:4083

            ...
                  decode_coding_gap (&coding, inserted, inserted);
                  inserted = coding.produced_char;
    >             coding_system = CODING_ID_NAME (coding.id);
                }
              else if (inserted > 0)
            ...

    0100C5AD  emacs.exe:0100C5AD  Ffuncall  eval.c:3038

            ...
              goto done;
            case 5:
    >         val = (*XSUBR (fun)->function) (internal_args[0], 
internal_args[1],
              internal_args[2], internal_args[3],
              internal_args[4]);
            ...

    0111E0F6  emacs.exe:0111E0F6  Fbyte_code  bytecode.c:679

            ...
                  }
            #endif
    >           TOP = Ffuncall (op + 1, &TOP);
                AFTER_POTENTIAL_GC ();
                break;
            ...

    0100C012  emacs.exe:0100C012  funcall_lambda  eval.c:3216

            ...
                }

    >         return unbind_to (count, val);
            }

            ...

    0100C3F6  emacs.exe:0100C3F6  Ffuncall  eval.c:3093

            ...
             done:
              CHECK_CONS_LIST ();
    >         lisp_eval_depth--;
              if (backtrace.debug_on_exit)
                val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
            ...

    0100C78E  emacs.exe:0100C78E  call4  eval.c:2880

            ...
              RETURN_UNGCPRO (Ffuncall (5, &fn));
            #endif /* not NO_ARG_ARRAY */
    >       }

            /* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5 */
            ...

    0107AC20  emacs.exe:0107AC20  Fload  lread.c:1225

            ...
                   NILP (noerror) ? Qnil : Qt,
                   (NILP (nomessage) || force_load_messages) ? Qnil : Qt);
    >         return unbind_to (count, val);
            }
                }
            ...

    0100C5AD  emacs.exe:0100C5AD  Ffuncall  eval.c:3038

            ...
              goto done;
            case 5:
    >         val = (*XSUBR (fun)->function) (internal_args[0], 
internal_args[1],
              internal_args[2], internal_args[3],
              internal_args[4]);
            ...

    0111E0F6  emacs.exe:0111E0F6  Fbyte_code  bytecode.c:679

            ...
                  }
            #endif
    >           TOP = Ffuncall (op + 1, &TOP);
                AFTER_POTENTIAL_GC ();
                break;
            ...

    0100C012  emacs.exe:0100C012  funcall_lambda  eval.c:3216

            ...
                }

    >         return unbind_to (count, val);
            }

            ...

    0100C3F6  emacs.exe:0100C3F6  Ffuncall  eval.c:3093

            ...
             done:
              CHECK_CONS_LIST ();
    >         lisp_eval_depth--;
              if (backtrace.debug_on_exit)
                val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
            ...

    0111E0F6  emacs.exe:0111E0F6  Fbyte_code  bytecode.c:679

            ...
                  }
            #endif
    >           TOP = Ffuncall (op + 1, &TOP);
                AFTER_POTENTIAL_GC ();
                break;
            ...

    0100C012  emacs.exe:0100C012  funcall_lambda  eval.c:3216

            ...
                }

    >         return unbind_to (count, val);
            }

            ...

    0100C3F6  emacs.exe:0100C3F6  Ffuncall  eval.c:3093

            ...
             done:
              CHECK_CONS_LIST ();
    >         lisp_eval_depth--;
              if (backtrace.debug_on_exit)
                val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
            ...

    0100CB8B  emacs.exe:0100CB8B  run_hook_with_args  eval.c:2683

            ...
                {
                  args[0] = XCAR (val);
    >             ret = Ffuncall (nargs, args);
                }
            }
            ...

    0100CD1C  emacs.exe:0100CD1C  Frun_hooks  eval.c:2534

            ...
              register int i;

    >         for (i = 0; i < nargs; i++)
                {
                  hook[0] = args[i];
            ...

    0100C6B4  emacs.exe:0100C6B4  Ffuncall  eval.c:3005

            ...
                  if (XSUBR (fun)->max_args == MANY)
            {
    >         val = (*XSUBR (fun)->function) (numargs, args + 1);
              goto done;
            }
            ...

    0111E0F6  emacs.exe:0111E0F6  Fbyte_code  bytecode.c:679

            ...
                  }
            #endif
    >           TOP = Ffuncall (op + 1, &TOP);
                AFTER_POTENTIAL_GC ();
                break;
            ...

    0100C012  emacs.exe:0100C012  funcall_lambda  eval.c:3216

            ...
                }

    >         return unbind_to (count, val);
            }

            ...

    0100C3F6  emacs.exe:0100C3F6  Ffuncall  eval.c:3093

            ...
             done:
              CHECK_CONS_LIST ();
    >         lisp_eval_depth--;
              if (backtrace.debug_on_exit)
                val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
            ...

    0111E0F6  emacs.exe:0111E0F6  Fbyte_code  bytecode.c:679

            ...
                  }
            #endif
    >           TOP = Ffuncall (op + 1, &TOP);
                AFTER_POTENTIAL_GC ();
                break;
            ...

    0100C012  emacs.exe:0100C012  funcall_lambda  eval.c:3216

            ...
                }

    >         return unbind_to (count, val);
            }

            ...

    0100D1AD  emacs.exe:0100D1AD  apply_lambda  eval.c:3135

            ...
                }
              backtrace_list->evalargs = 0;
    >         tem = funcall_lambda (fun, XINT (numargs), arg_vector);

              /* Do the debug-on-exit now, while arg_vector still exists.  */
            ...

    0100B906  emacs.exe:0100B906  Feval  eval.c:2413

            ...
              CHECK_CONS_LIST ();

    >         lisp_eval_depth--;
              if (backtrace.debug_on_exit)
                val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
            ...

    01053927  emacs.exe:01053927  top_level_2  keyboard.c:1370

            ...
            {
              return Feval (Vtop_level);
    >       }

            Lisp_Object
            ...

    0100A16A  emacs.exe:0100A16A  internal_condition_case  eval.c:1491

            ...

              val = (*bfun) ();
    >         catchlist = c.next;
              handlerlist = h.next;
              return val;
            ...

    01053959  emacs.exe:01053959  top_level_1  keyboard.c:1382

            ...
              else
                message ("Bare Emacs (standard Lisp code not loaded)");
    >         return Qnil;
            }

            ...

    0100A09F  emacs.exe:0100A09F  internal_catch  eval.c:1226

            ...
              /* Call FUNC.  */
              if (! _setjmp (c.jmp))
    >           c.val = (*func) (arg);

              /* Throw works by a longjmp that comes right here.  */
            ...

    010536F9  emacs.exe:010536F9  command_loop  keyboard.c:1339

            ...
                    any_kboard_state ();
            #endif
    >       internal_catch (Qtop_level, command_loop_2, Qnil);
            executing_kbd_macro = Qnil;

            ...

    010537B0  emacs.exe:010537B0  recursive_edit_1  keyboard.c:955

            ...

              val = command_loop ();
    >         if (EQ (val, Qt))
                Fsignal (Qquit, Qnil);
              /* Handle throw from read_minibuf when using minibuffer
            ...

    010538D1  emacs.exe:010538D1  Frecursive_edit  keyboard.c:1017

            ...

              recursive_edit_1 ();
    >         return unbind_to (count, Qnil);
            }

            ...

    01002E2F  emacs.exe:01002E2F  main  emacs.c:1836

            ...
              /* NOTREACHED */
              return 0;
    >       }

            /* Sort the args so we can find the most important ones
            ...

    0100124B  emacs.exe:0100124B
    01001298  emacs.exe:01001298
    7C816D4F  kernel32.dll:7C816D4F  RegisterWaitForInputIdle





reply via email to

[Prev in Thread] Current Thread [Next in Thread]