return;
int ret;
- while ((ret = flock(m_lockFileFd, m_blocking ? LOCK_EX : LOCK_NB | LOCK_EX)) && (errno == EINTR));
- m_locked = ret == 0;
- int err = errno;
- if (ret && err != EWOULDBLOCK)
- LogErrno("locking a file " << m_lockFile);
-
- if (m_locked)
- LogDebug("We have a lock on " << m_lockFile << " file.");
- else
- LogDebug("Impossible to lock a file now.");
+ while ((ret = flock(m_lockFileFd, m_blocking ? LOCK_EX : LOCK_NB | LOCK_EX))
+ && errno == EINTR) {}
+ if (ret)
+ ThrowMsg(FileLockerException::LockFailed,
+ "Failed to lock a file " << m_lockFile << ", errno=" << errno);
+ m_locked = true;
+ LogDebug("We have a lock on " << m_lockFile << " file.");
}
void FileLocker::Unlock()
{
if (m_locked) {
int ret;
- while ((ret = flock(m_lockFileFd, LOCK_UN)) && (errno == EINTR));
+ while ((ret = flock(m_lockFileFd, LOCK_UN)) && errno == EINTR) {}
if (ret)
LogErrno("unlocking a file " << m_lockFile);
EXPECT_EQ(ret, 1);
}
-TEST_F(FileLockerTest, lock_to_locked_path_nonblock_P)
+TEST_F(FileLockerTest, try_to_locked_path_N)
{
int ret = 0;
try{
FileLocker fileLocker("/tmp/.webauthn-test.lock", true);
FileLocker fileLocker2("/tmp/.webauthn-test.lock", false);
- EXPECT_EQ(fileLocker.Locked(), true);
- EXPECT_EQ(fileLocker2.Locked(), false);
- fileLocker.Unlock();
- EXPECT_EQ(fileLocker.Locked(), false);
} catch (FileLockerException::LockFailed &e)
{
ret = 1;
std::cout << "Error in FileLocker" << std::endl;
ret = -1;
}
- EXPECT_EQ(ret, 0);
+ EXPECT_EQ(ret, 1);
}
} // namespace WebAuthn