aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/memory.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-02-04 20:14:31 +0800
committerGitHub <noreply@github.com>2023-02-04 20:14:31 +0800
commit69bb145cea56067e6e82ed0a130a51c0d611e540 (patch)
treecbb045aac106e922647bd2a24ea4dd7a4b1763d4 /src/nvim/memory.c
parent90333b24c3582cb017d823583d4896c8bbb8edb8 (diff)
downloadrneovim-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.c15
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);