diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2022-06-18 18:30:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-18 09:30:54 -0700 |
commit | 9c0f2253a5c014ba1ab7ee6e403a0b07c4e01b40 (patch) | |
tree | 21542cce626c5c354dd0ed87a01b031368a30a66 | |
parent | 1ad6423f02bad6d7941ca38f2d5f7b757811e022 (diff) | |
download | rneovim-9c0f2253a5c014ba1ab7ee6e403a0b07c4e01b40.tar.gz rneovim-9c0f2253a5c014ba1ab7ee6e403a0b07c4e01b40.tar.bz2 rneovim-9c0f2253a5c014ba1ab7ee6e403a0b07c4e01b40.zip |
fix(logging): try harder to resolve Nvim "name" #19016
Problem:
If startup finishes (starting=false) before the logger ever happens to
see a v:servername, we're stuck with the "?.<PID>" fallback name
forever.
Solution:
Drop the `starting` condition. Discard the "?.<PID>" fallback after
using it for the current log message. So logging will always check
v:servername next time.
-rw-r--r-- | src/nvim/eval.c | 2 | ||||
-rw-r--r-- | src/nvim/log.c | 11 |
2 files changed, 9 insertions, 4 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index fd69b5b726..a4f56b47e6 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -8199,7 +8199,7 @@ varnumber_T get_vim_var_nr(int idx) FUNC_ATTR_PURE /// Get string v: variable value. Uses a static buffer, can only be used once. /// If the String variable has never been set, return an empty string. -/// Never returns NULL; +/// Never returns NULL. char *get_vim_var_str(int idx) FUNC_ATTR_PURE FUNC_ATTR_NONNULL_RET { diff --git a/src/nvim/log.c b/src/nvim/log.c index d2c7782e5d..57c7c4758b 100644 --- a/src/nvim/log.c +++ b/src/nvim/log.c @@ -305,15 +305,15 @@ static bool v_do_log_to_file(FILE *log_file, int log_level, const char *context, // Get a name for this Nvim instance. // TODO(justinmk): expose this as v:name ? - if (starting || name[0] == '\0') { + if (name[0] == '\0') { // Parent servername. const char *parent = path_tail(os_getenv(ENV_NVIM)); // Servername. Empty until starting=false. const char *serv = path_tail(get_vim_var_str(VV_SEND_SERVER)); if (parent && parent[0] != NUL) { snprintf(name, sizeof(name), "%s/c", parent); // "/c" indicates child. - } else if (serv && serv[0] != NUL) { - snprintf(name, sizeof(name), "%s", serv ? serv : ""); + } else if (serv[0] != NUL) { + snprintf(name, sizeof(name), "%s", serv); } else { int64_t pid = os_get_pid(); snprintf(name, sizeof(name), "?.%-5" PRId64, pid); @@ -329,6 +329,11 @@ static bool v_do_log_to_file(FILE *log_file, int log_level, const char *context, log_levels[log_level], date_time, millis, name, (context == NULL ? "" : context), func_name, line_num); + if (name[0] == '?') { + // No v:servername yet. Clear `name` so that the next log can try again. + name[0] = '\0'; + } + if (rv < 0) { return false; } |