diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-02-04 20:14:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-04 20:14:31 +0800 |
commit | 69bb145cea56067e6e82ed0a130a51c0d611e540 (patch) | |
tree | cbb045aac106e922647bd2a24ea4dd7a4b1763d4 /src/nvim/memory.c | |
parent | 90333b24c3582cb017d823583d4896c8bbb8edb8 (diff) | |
download | rneovim-69bb145cea56067e6e82ed0a130a51c0d611e540.tar.gz rneovim-69bb145cea56067e6e82ed0a130a51c0d611e540.tar.bz2 rneovim-69bb145cea56067e6e82ed0a130a51c0d611e540.zip |
refactor(exit): pass error message to preserve_exit() (#22097)
Problem:
1. Some calls to preserve_exit() don't put a message in IObuff, so the
IObuff printed by preserve_exit() contains unrelated information.
2. If a TUI client runs out of memory or receives a deadly signal, the
error message is shown on alternate screen and cannot be easily seen
because the TUI exits alternate screen soon afterwards.
Solution:
Pass error message to preserve_exit() and exit alternate screen before
printing it.
Note that this doesn't fix the problem that server error messages cannot
be easily seen on exit. This is tracked in #21608 and #21843.
Diffstat (limited to 'src/nvim/memory.c')
-rw-r--r-- | src/nvim/memory.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/src/nvim/memory.c b/src/nvim/memory.c index 5356300382..4e799dfd08 100644 --- a/src/nvim/memory.c +++ b/src/nvim/memory.c @@ -121,9 +121,7 @@ void *xmalloc(size_t size) { void *ret = try_malloc(size); if (!ret) { - os_errmsg(e_outofmem); - os_errmsg("\n"); - preserve_exit(); + preserve_exit(e_outofmem); } return ret; } @@ -152,9 +150,7 @@ void *xcalloc(size_t count, size_t size) try_to_free_memory(); ret = calloc(allocated_count, allocated_size); if (!ret) { - os_errmsg(e_outofmem); - os_errmsg("\n"); - preserve_exit(); + preserve_exit(e_outofmem); } } return ret; @@ -174,9 +170,7 @@ void *xrealloc(void *ptr, size_t size) try_to_free_memory(); ret = realloc(ptr, allocated_size); if (!ret) { - os_errmsg(e_outofmem); - os_errmsg("\n"); - preserve_exit(); + preserve_exit(e_outofmem); } } return ret; @@ -194,8 +188,7 @@ void *xmallocz(size_t size) { size_t total_size = size + 1; if (total_size < size) { - os_errmsg(_("Vim: Data too large to fit into virtual memory space\n")); - preserve_exit(); + preserve_exit(_("Vim: Data too large to fit into virtual memory space\n")); } void *ret = xmalloc(total_size); |