Subject: Re: bug#30182: Update

From: martin rudalics <[email-masked]>
Date: Wed, 24 Jan 2018 09:38:49 +0100

>>   >   . Could the problem be caused by mode-line-default-help-echo being a
 >>   >     function now, not just a string?  Maybe try to revert only that
 >>   >     portion of the changeset, and see if that helps.
 >>
 >> It can be made into a string and the OP confirmed already that doing
 >> that fixes things.
 >
 > He did?  If so, I missed that.  I thought he only said that disabling
 > the part that runs the timer in the :eval form prevents the problem.

I asked the OP to

   Just to eliminate one possible cause: Does the bug disappear when you
   customize `mode-line-default-help-echo' to the default value of the
   'string' alternative?

and he answered that

   Yes, if that is done, then the crash doesn't happen.

 > So if using a string instead of a function the returns a string solves
 > the problem, then I guess we should try and understand why a function
 > causes the problem.

Apparently because evaluating that function creates a timer.

 >> The OP already checked that wrapping `mode-line-default-help-echo'
 >> into a condition-case does not help.
 >
 > That doesn't surprise me, because safe_call1 alread runs the function
 > inside condition-case.  But catching an error might not be all that
 > needs to be done to undo the damage, so I think it is important to
 > establish whether there is indeed an error signaled by that function.

w3m.el, when creating a buffer for its purposes, does

   (setq mode-line-buffer-identification
	`(
[...]
	  (w3m-current-process
	   "Loading..." ,(if (fboundp 'format-mode-line)
			     '(:eval (w3m-modeline-title))

where the latter contains

(defun w3m-modeline-title ()
[...]
				(condition-case nil
				    (format-mode-line mode-line-format 1)
				  (error "")))
[...]
	    (run-at-time 0.5 nil
			 (lambda (buffer)
			   (when (buffer-live-p buffer)
			     (with-current-buffer buffer
			       (setq w3m-modeline-title-timer nil))))
			 (current-buffer)))))))

But I haven't been able yet to trigger the crash from here.

martin