Subject: Re: bug#30846: 26.0.91; debug-watch of kill-all-local-variables triggers 'assertion failed: found == !EQ (blv->defcell, blv->valcell)'

From: Eli Zaretskii <[email-masked]>
Date: Sun, 18 Mar 2018 16:07:33 +0200

> From: Noam Postavsky <[email-masked]>
> Date: Sun, 18 Mar 2018 09:10:41 -0400
> 
> Evaluate the following from 'emacs -Q':
> 
>     (setq-local foo 1)
> 
>     ;; Simulate (debug-watch 'foo) + continue from *Backtrace*
>     (add-variable-watcher 'foo (lambda (symbol newval operation where)
>                                  (with-temp-buffer
>                                    (kill-all-local-variables))))
>     (fundamental-mode)
> 
> This results in
> 
> ../../src/data.c:98: Emacs fatal error: assertion failed: found == !EQ (blv->defcell, blv->valcell)
> 
> Backtrace attached.  I guess it has something to do with the recursive
> `kill-all-local-variables' call, although I'm not familiar enough with
> the local variable machinery to say more about it.

Do you mean that the inner call to kill-all-local-variables steps on
toes of the outer call, and thus corrupts the local values or
something?  If so, do you see any signs of such a corruption?  Because
otherwise maybe the assertion is wrong?