Merge bitcoin/bitcoin#25898: util: remove WSL 1 workaround in fs
5669afb80efs: drop old WSL1 hack. (sinetek) Pull request description: Following discussion, the WSL1 patch will be removed, as WSL1 is no longer being developed by Microsoft. Instead, please upgrade to a mainstream WSL2 version. More information can be found on [the official website](https://docs.microsoft.com/en-us/windows/wsl/). ACKs for top commit: 1440000bytes: ACK https://github.com/bitcoin/bitcoin/pull/25898/commits/5669afb80e350027705dc378d2ab16232567511a fanquake: ACK5669afb80e- seems ok as-is. Tree-SHA512: 256c13985f6dd3453caf39c7ef1c951dbdfa8457a18cd05e4624db36d8ed8a4f809bb78a7b3c82c72997e9ed3823d5566a5c2d0812d2501aba2e54bc5e6eec79
This commit is contained in:
1 file changed
+8
-24
+8
-24
@@ -60,36 +60,20 @@ FileLock::~FileLock()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsWSL()
|
|
||||||
{
|
|
||||||
struct utsname uname_data;
|
|
||||||
return uname(&uname_data) == 0 && std::string(uname_data.version).find("Microsoft") != std::string::npos;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FileLock::TryLock()
|
bool FileLock::TryLock()
|
||||||
{
|
{
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exclusive file locking is broken on WSL using fcntl (issue #18622)
|
struct flock lock;
|
||||||
// This workaround can be removed once the bug on WSL is fixed
|
lock.l_type = F_WRLCK;
|
||||||
static const bool is_wsl = IsWSL();
|
lock.l_whence = SEEK_SET;
|
||||||
if (is_wsl) {
|
lock.l_start = 0;
|
||||||
if (flock(fd, LOCK_EX | LOCK_NB) == -1) {
|
lock.l_len = 0;
|
||||||
reason = GetErrorReason();
|
if (fcntl(fd, F_SETLK, &lock) == -1) {
|
||||||
return false;
|
reason = GetErrorReason();
|
||||||
}
|
return false;
|
||||||
} else {
|
|
||||||
struct flock lock;
|
|
||||||
lock.l_type = F_WRLCK;
|
|
||||||
lock.l_whence = SEEK_SET;
|
|
||||||
lock.l_start = 0;
|
|
||||||
lock.l_len = 0;
|
|
||||||
if (fcntl(fd, F_SETLK, &lock) == -1) {
|
|
||||||
reason = GetErrorReason();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in new issue
Block a user