From: Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
To: Robert Burks <rburksdev@gmail.com>
Cc: 70183@debbugs.gnu.org
Subject: bug#70183: [PATCH] Fix + ert for multiple watcher notifications (2 of 9)
Date: Sat, 06 Apr 2024 23:17:40 -0400 [thread overview]
Message-ID: <jwvy19qyq41.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <CAHvcHq5KuD9s1tha9urmVa=KeLsEhv_qP1RBBfWRwvBBu4nr4A@mail.gmail.com> (Robert Burks's message of "Thu, 4 Apr 2024 04:44:41 -0400")
> Additionally, I moved the XSETSYMBOL to the top from inside the
> localized to point out that while redirection was important, the notes
> there didn't express how important it was to convert the symbol to bare.
Maybe a better option here is to signal an error if passed a non-bare symbol.
At the very least it'd be useful to know how a sympos arrived here, in
order to decide whether we want to tolerate them here or whether we should
better fix the caller(s).
> Subject: [PATCH 02/31] Fix multiple watcher calls in set_default_internal
> (bug#00001)
>
> * src/data.c (set_default_internal):
> Variable watchers will now execute one time if called using an alias.
> (bug#00001)
>
> ---
> src/data.c | 43 ++++++++++++++++++++++++++-----------------
> 1 file changed, 26 insertions(+), 17 deletions(-)
>
> diff --git a/src/data.c b/src/data.c
> index c42424497ad..48da5cee429 100644
> --- a/src/data.c
> +++ b/src/data.c
> @@ -1986,31 +1986,21 @@ set_default_internal (Lisp_Object symbol, Lisp_Object value,
> {
> CHECK_SYMBOL (symbol);
> struct Lisp_Symbol *sym = XSYMBOL (symbol);
> - switch (sym->u.s.trapped_write)
> + /* Update for aliasing and sanitize the input to ensure only a bare
> + symbol is stored. It may be accessed with positions disabled. */
> + start:
> + XSETSYMBOL (symbol, sym);
> +
> + if (sym->u.s.trapped_write == SYMBOL_NOWRITE)
> {
> - case SYMBOL_NOWRITE:
> if (NILP (Fkeywordp (symbol))
> || !EQ (value, Fsymbol_value (symbol)))
> xsignal1 (Qsetting_constant, symbol);
> else
> /* Allow setting keywords to their own value. */
> - return;
> -
> - case SYMBOL_TRAPPED_WRITE:
> - /* Don't notify here if we're going to call Fset anyway. */
> - if (sym->u.s.redirect != SYMBOL_PLAINVAL
> - /* Setting due to thread switching doesn't count. */
> - && bindflag != SET_INTERNAL_THREAD_SWITCH)
> - notify_variable_watchers (symbol, value, Qset_default, Qnil);
> - break;
> -
> - case SYMBOL_UNTRAPPED_WRITE:
> - break;
> -
> - default: emacs_abort ();
> + return;
> }
I think we should check `sym->u.s.trapped_write`
only after following the alias redirection.
Stefan
prev parent reply other threads:[~2024-04-07 3:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-04 8:44 bug#70183: [PATCH] Fix + ert for multiple watcher notifications (2 of 9) Robert Burks
2024-04-06 7:29 ` Eli Zaretskii
2024-04-07 0:26 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-07 3:17 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvy19qyq41.fsf-monnier+emacs@gnu.org \
--to=bug-gnu-emacs@gnu.org \
--cc=70183@debbugs.gnu.org \
--cc=monnier@iro.umontreal.ca \
--cc=rburksdev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).