From 57b0fecd47b90c2f84772d29a69f539384ec3168 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Wed, 13 Nov 2024 13:22:40 +0800 Subject: [PATCH] fix(startup): report --startuptime error to stderr (#31131) Problem: Crash when initializing for --startuptime errors. Solution: Report the error to stderr, as neither logging nor messages have been initialized yet. (cherry picked from commit 17e00d0cc63cf2a42a66b03f28bd567f11998c24) --- src/nvim/profile.c | 5 ++--- test/functional/core/startup_spec.lua | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/nvim/profile.c b/src/nvim/profile.c index b88b08d3f0..70bbeaced3 100644 --- a/src/nvim/profile.c +++ b/src/nvim/profile.c @@ -955,7 +955,7 @@ void time_init(const char *fname, const char *process_name) const size_t bufsize = 8192; // Big enough for the entire --startuptime report. time_fd = fopen(fname, "a"); if (time_fd == NULL) { - semsg(_(e_notopen), fname); + fprintf(stderr, _(e_notopen), fname); return; } startuptime_buf = xmalloc(sizeof(char) * (bufsize + 1)); @@ -967,8 +967,7 @@ void time_init(const char *fname, const char *process_name) XFREE_CLEAR(startuptime_buf); fclose(time_fd); time_fd = NULL; - ELOG("time_init: setvbuf failed: %d %s", r, uv_err_name(r)); - semsg("time_init: setvbuf failed: %d %s", r, uv_err_name(r)); + fprintf(stderr, "time_init: setvbuf failed: %d %s", r, uv_err_name(r)); return; } fprintf(time_fd, "--- Startup times for process: %s ---\n", process_name); diff --git a/test/functional/core/startup_spec.lua b/test/functional/core/startup_spec.lua index 1bb4ce2946..c80602d156 100644 --- a/test/functional/core/startup_spec.lua +++ b/test/functional/core/startup_spec.lua @@ -82,6 +82,25 @@ describe('startup', function() assert_log("require%('vim%._editor'%)", testfile, 100) end) + it('--startuptime does not crash on error #31125', function() + eq( + "E484: Can't open file .", + fn.system({ + nvim_prog, + '-u', + 'NONE', + '-i', + 'NONE', + '--headless', + '--startuptime', + '.', + '-c', + '42cquit', + }) + ) + eq(42, api.nvim_get_vvar('shell_error')) + end) + it('-D does not hang #12647', function() clear() local screen