Subject: Re: bug#30182: Update

From: Eli Zaretskii <[email-masked]>
Date: Wed, 24 Jan 2018 21:10:52 +0200

> Date: Wed, 24 Jan 2018 09:38:49 +0100
> From: martin rudalics <[email-masked]>
> CC: [email-masked], [email-masked]
> 
> 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.

OK, thanks.

>  > 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.

You mean, mode-line-default-help-echo creates a timer?  If it does, I
don't see where it does that.

> 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.

What I don't understand is how is the above :eval form related to
mode-line-default-help-echo.  They are both properties of parts of the
mode line, but how is that relevant to the issue at hand?