emacs-devel
[Top][All Lists]
Advanced

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

Re: Crash on invalid cons_free_list


From: Kevin Rodgers
Subject: Re: Crash on invalid cons_free_list
Date: Tue, 13 Sep 2005 12:03:32 -0600
User-agent: Mozilla Thunderbird 0.9 (X11/20041105)

Kim F. Storm wrote:
> Chong Yidong <address@hidden> writes:
>>I installed VM to and played around with it trying to make the
>>string_free_list/compact_small_strings crash happen.  I got a crash on
>>an invalid cons_free_list; dunno if that's related.
>
> It seems that most of the crashes triggered by VM are somehow related
> to mapcar -- and in this case a mapcar called inside mapatoms.
>
> Can you deduce what functions are run here, and see if they
> do something special, e.g. intern new symbols or something
> else which manipulates symbols, conses, or strings...

Here is the code inside vm-update-summary-and-mode-line that calls
mapatoms:

  (save-excursion
    (mapatoms (function
               (lambda (b)
                 (setq b (get-buffer (symbol-name b)))
                 (if b
                     (progn
                       (set-buffer b)
                       (intern (buffer-name)
                               vm-buffers-needing-undo-boundaries)
                       (vm-check-for-killed-summary)
                       (and vm-use-toolbar
                            (vm-toolbar-support-possible-p)
                            (vm-toolbar-update-toolbar))
                       (vm-do-needed-renumbering)
                       (if vm-summary-buffer
                           (vm-do-needed-summary-rebuild))
                       (vm-do-needed-mode-line-update)))))
              vm-buffers-needing-display-update)
    (fillarray vm-buffers-needing-display-update 0))

The crash occurs inside vm-do-needed-mode-line-update, which calls
vm-copy-local-variables, which in turn calls vm-mapc:

(defun vm-copy-local-variables (buffer &rest variables)
  (let ((values (mapcar 'symbol-value variables)))
    (save-excursion
      (set-buffer buffer)
      (vm-mapc 'set variables values))))

(defun vm-mapc (function &rest lists)
  (let (arglist)
    (while (car lists)
      (setq arglist (mapcar 'car lists))
      (apply function arglist)
      (setq lists (mapcar 'cdr lists)))))

--
Kevin





reply via email to

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