From fcb63130d657f0cbc92b72a870308e4b0e7496b6 Mon Sep 17 00:00:00 2001 From: Leo Yuriev Date: Wed, 5 Apr 2017 16:34:19 +0300 Subject: [PATCH] mdbx: fix posix mdbx_lck_destroy(). --- src/lck-posix.c | 2 +- src/mdbx.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/lck-posix.c b/src/lck-posix.c index 7c78f707..82b23934 100644 --- a/src/lck-posix.c +++ b/src/lck-posix.c @@ -89,7 +89,7 @@ bailout: void mdbx_lck_destroy(MDB_env *env) { if (env->me_lfd != INVALID_HANDLE_VALUE) { /* try get exclusive access */ - if (mdbx_lck_op(env->me_lfd, F_SETLK, F_WRLCK, 0) == 0) { + if (env->me_txns && mdbx_lck_op(env->me_lfd, F_SETLK, F_WRLCK, 0) == 0) { /* got exclusive, drown mutexes */ int rc = pthread_mutex_destroy(&env->me_txns->mti_rmutex); if (rc == 0) diff --git a/src/mdbx.c b/src/mdbx.c index 384ecfda..de228e5a 100644 --- a/src/mdbx.c +++ b/src/mdbx.c @@ -4160,8 +4160,10 @@ static void __cold mdbx_env_close0(MDB_env *env) { env->me_valgrind_handle = -1; #endif } - if (env->me_fd != INVALID_HANDLE_VALUE) + if (env->me_fd != INVALID_HANDLE_VALUE) { (void)mdbx_closefile(env->me_fd); + env->me_fd = INVALID_HANDLE_VALUE; + } mdbx_munmap((void *)env->me_txns, (env->me_maxreaders - 1) * sizeof(MDB_reader) + @@ -4169,8 +4171,10 @@ static void __cold mdbx_env_close0(MDB_env *env) { env->me_txns = NULL; env->me_pid = 0; - if (env->me_lfd != INVALID_HANDLE_VALUE) + if (env->me_lfd != INVALID_HANDLE_VALUE) { (void)mdbx_closefile(env->me_lfd); + env->me_lfd = INVALID_HANDLE_VALUE; + } } int __cold mdbx_env_close_ex(MDB_env *env, int dont_sync) {