aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoão Barbosa <joao.paulo.barbosa@gmail.com>2019-01-31 00:05:18 +0000
committerJoão Barbosa <joao.paulo.barbosa@gmail.com>2019-03-12 23:24:11 +0000
commit2e9e904a5d58e0d288e9abc1cbc602a8674bc1a2 (patch)
tree54c8e417a1a9c1ae964534a4b4811dce9d33b6a5
parent22cdb6cf590d61668c85c1c08dcc15b4e95921c6 (diff)
wallet: Close wallet env lock file
Close .walletlock file when a BerkeleyEnvironment is deleted. Github-Pull: #15297 Rebased-From: 2f8b8f4
-rw-r--r--src/util.cpp6
-rw-r--r--src/util.h1
-rw-r--r--src/wallet/db.cpp2
3 files changed, 9 insertions, 0 deletions
diff --git a/src/util.cpp b/src/util.cpp
index a391c5e857..b41e61ddf5 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -174,6 +174,12 @@ bool LockDirectory(const fs::path& directory, const std::string lockfile_name, b
return true;
}
+void UnlockDirectory(const fs::path& directory, const std::string& lockfile_name)
+{
+ std::lock_guard<std::mutex> lock(cs_dir_locks);
+ dir_locks.erase((directory / lockfile_name).string());
+}
+
void ReleaseDirectoryLocks()
{
std::lock_guard<std::mutex> ulock(cs_dir_locks);
diff --git a/src/util.h b/src/util.h
index 23b2a787e4..9576541249 100644
--- a/src/util.h
+++ b/src/util.h
@@ -77,6 +77,7 @@ int RaiseFileDescriptorLimit(int nMinFD);
void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length);
bool RenameOver(fs::path src, fs::path dest);
bool LockDirectory(const fs::path& directory, const std::string lockfile_name, bool probe_only=false);
+void UnlockDirectory(const fs::path& directory, const std::string& lockfile_name);
bool DirIsWritable(const fs::path& directory);
/** Release all directory locks. This is used for unit testing only, at runtime
diff --git a/src/wallet/db.cpp b/src/wallet/db.cpp
index 7e7fd24a8c..89b68495ad 100644
--- a/src/wallet/db.cpp
+++ b/src/wallet/db.cpp
@@ -136,6 +136,8 @@ void BerkeleyEnvironment::Close()
DbEnv((u_int32_t)0).remove(strPath.c_str(), 0);
if (error_file) fclose(error_file);
+
+ UnlockDirectory(strPath, ".walletlock");
}
void BerkeleyEnvironment::Reset()