diff options
| author | Philipp Stephani | 2025-01-30 16:12:49 +0100 |
|---|---|---|
| committer | Philipp Stephani | 2025-02-28 01:45:35 +0100 |
| commit | 32da093e524d5e28945557701f7c50d7c4a898cd (patch) | |
| tree | 00275d27c38ef719d99b03b4ccb68023fae71571 /java/org | |
| parent | ea715b0183f6a19d491cad36eb18c2c9cf0f0dd3 (diff) | |
| download | emacs-32da093e524d5e28945557701f7c50d7c4a898cd.tar.gz emacs-32da093e524d5e28945557701f7c50d7c4a898cd.zip | |
Don't overwrite non-local exit symbol and data (Bug#65796).
The previous approach would incorrectly invalidate the returned module
values if another non-local exit occurred while dealing with a non-local
exit. See Bug#65796. Instead, allocate the values from the usual
environment storage, and return statically-allocated objects if that
fails.
* src/emacs-module.c (struct emacs_env_private): Turn non-local exit
symbol and data into normal Lisp objects.
(initialize_environment): Initialize them.
(mark_module_environment): Prevent them from being garbage-collected.
(module_signal_or_throw, module_non_local_exit_signal_1)
(module_non_local_exit_throw_1): Adapt uses.
(value_to_lisp): No longer scan for them with module assertions enabled.
(module_out_of_memory_signal, module_out_of_memory_data): New
statically-allocated module values to return in case of allocation
failure.
(syms_of_module): Initialize them.
(module_non_local_exit_get): Allocate module values normally. If that
fails, return statically-allocated values.
* doc/lispref/internals.texi (Module Nonlocal): Document new behavior.
Diffstat (limited to 'java/org')
0 files changed, 0 insertions, 0 deletions