aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os_unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/os_unix.c')
-rw-r--r--src/nvim/os_unix.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/nvim/os_unix.c b/src/nvim/os_unix.c
index acd86f06dc..a27fee4e90 100644
--- a/src/nvim/os_unix.c
+++ b/src/nvim/os_unix.c
@@ -1,3 +1,6 @@
+// This is an open source non-commercial project. Dear PVS-Studio, please check
+// it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
+
/*
* os_unix.c -- code for all flavors of Unix (BSD, SYSV, SVR4, POSIX, ...)
*
@@ -131,6 +134,7 @@ void mch_free_acl(vim_acl_T aclent)
#endif
void mch_exit(int r)
+ FUNC_ATTR_NORETURN
{
exiting = true;
@@ -138,8 +142,12 @@ void mch_exit(int r)
ui_flush();
ml_close_all(true); // remove all memfiles
- event_teardown();
- stream_set_blocking(input_global_fd(), true); // normalize stream (#2598)
+ if (!event_teardown() && r == 0) {
+ r = 1; // Exit with error if main_loop did not teardown gracefully.
+ }
+ if (input_global_fd() >= 0) {
+ stream_set_blocking(input_global_fd(), true); // normalize stream (#2598)
+ }
#ifdef EXITFREE
free_all_mem();
@@ -170,7 +178,7 @@ void mch_exit(int r)
/// @returns OK for success or FAIL for error.
int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file,
char_u ***file, int flags) FUNC_ATTR_NONNULL_ARG(3)
- FUNC_ATTR_NONNULL_ARG(4)
+ FUNC_ATTR_NONNULL_ARG(4)
{
int i;
size_t len;