summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorAhmad Samir <a.samirh78@gmail.com>2023-02-28 01:09:13 +0200
committerAhmad Samir <a.samirh78@gmail.com>2023-03-15 20:48:31 +0200
commita0e3da2625a39f16e2b0cdf187b5a4fd65eed855 (patch)
tree70475e41ef97e2dd2e07522ea986c4573db83e3d /src/corelib
parent779bdf481ca208c20cfabd02d02d74175b0624b9 (diff)
QLockFile: {set}StaleLockTime: use chrono first
This is similar to the tryLock() commit, making the chrono overloads the main methods, this way the lock time isn't limited by the size of int, but rather by std::chrono::milliseconds (which can be as up to int64_t). Task-number: QTBUG-110059 Change-Id: I8d1652748b16be2154233f7db57ed485bcab62c7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/io/qlockfile.cpp37
-rw-r--r--src/corelib/io/qlockfile.h8
-rw-r--r--src/corelib/io/qlockfile_p.h4
3 files changed, 30 insertions, 19 deletions
diff --git a/src/corelib/io/qlockfile.cpp b/src/corelib/io/qlockfile.cpp
index 1c061890a8..c90d2886c2 100644
--- a/src/corelib/io/qlockfile.cpp
+++ b/src/corelib/io/qlockfile.cpp
@@ -60,7 +60,7 @@ static QString machineName()
When protecting for a short-term operation, it is acceptable to call lock() and wait
until any running operation finishes.
When protecting a resource over a long time, however, the application should always
- call setStaleLockTime(0) and then tryLock() with a short timeout, in order to
+ call setStaleLockTime(0ms) and then tryLock() with a short timeout, in order to
warn the user that the resource is locked.
If the process holding the lock crashes, the lock file stays on disk and can prevent
@@ -138,20 +138,24 @@ QString QLockFile::fileName() const
meanwhile, so one way to detect a stale lock file is by the fact that
it has been around for a long time.
+ This is an overloaded function, equivalent to calling:
+ \code
+ setStaleLockTime(std::chrono::milliseconds{staleLockTime});
+ \endcode
+
\sa staleLockTime()
*/
void QLockFile::setStaleLockTime(int staleLockTime)
{
- Q_D(QLockFile);
- d->staleLockTime = staleLockTime;
+ setStaleLockTime(std::chrono::milliseconds{staleLockTime});
}
-/*! \fn void QLockFile::setStaleLockTime(std::chrono::milliseconds value)
- \overload
+/*!
\since 6.2
- Sets the interval after which a lock file is considered stale to \a value.
- The default value is 30 seconds.
+ Sets the interval after which a lock file is considered stale to \a staleLockTime.
+ The default value is 30s.
+
If your application typically keeps the file locked for more than 30 seconds
(for instance while saving megabytes of data for 2 minutes), you should set
a bigger value using setStaleLockTime().
@@ -164,6 +168,11 @@ void QLockFile::setStaleLockTime(int staleLockTime)
\sa staleLockTime()
*/
+void QLockFile::setStaleLockTime(std::chrono::milliseconds staleLockTime)
+{
+ Q_D(QLockFile);
+ d->staleLockTime = staleLockTime;
+}
/*!
Returns the time in milliseconds after which
@@ -173,8 +182,7 @@ void QLockFile::setStaleLockTime(int staleLockTime)
*/
int QLockFile::staleLockTime() const
{
- Q_D(const QLockFile);
- return d->staleLockTime;
+ return int(staleLockTimeAsDuration().count());
}
/*! \fn std::chrono::milliseconds QLockFile::staleLockTimeAsDuration() const
@@ -186,6 +194,11 @@ int QLockFile::staleLockTime() const
\sa setStaleLockTime()
*/
+std::chrono::milliseconds QLockFile::staleLockTimeAsDuration() const
+{
+ Q_D(const QLockFile);
+ return d->staleLockTime;
+}
/*!
Returns \c true if the lock was acquired by this QLockFile instance,
@@ -427,8 +440,10 @@ bool QLockFilePrivate::isApparentlyStale() const
}
}
- const qint64 age = QFileInfo(fileName).lastModified(QTimeZone::UTC).msecsTo(QDateTime::currentDateTimeUtc());
- return staleLockTime > 0 && qAbs(age) > staleLockTime;
+ const QDateTime lastMod = QFileInfo(fileName).lastModified(QTimeZone::UTC);
+ using namespace std::chrono;
+ const milliseconds age{lastMod.msecsTo(QDateTime::currentDateTimeUtc())};
+ return staleLockTime > 0ms && abs(age) > staleLockTime;
}
/*!
diff --git a/src/corelib/io/qlockfile.h b/src/corelib/io/qlockfile.h
index ccba93baa5..ecc26d137f 100644
--- a/src/corelib/io/qlockfile.h
+++ b/src/corelib/io/qlockfile.h
@@ -37,12 +37,8 @@ public:
}
#endif
- void setStaleLockTime(std::chrono::milliseconds value) { setStaleLockTime(int(value.count())); }
-
- std::chrono::milliseconds staleLockTimeAsDuration() const
- {
- return std::chrono::milliseconds(staleLockTime());
- }
+ void setStaleLockTime(std::chrono::milliseconds value);
+ std::chrono::milliseconds staleLockTimeAsDuration() const;
bool isLocked() const;
bool getLockInfo(qint64 *pid, QString *hostname, QString *appname) const;
diff --git a/src/corelib/io/qlockfile_p.h b/src/corelib/io/qlockfile_p.h
index 4eea312ef5..299b13b21a 100644
--- a/src/corelib/io/qlockfile_p.h
+++ b/src/corelib/io/qlockfile_p.h
@@ -53,8 +53,8 @@ public:
#else
int fileHandle = -1;
#endif
- // "int milliseconds" is big enough for 24 days
- int staleLockTime = 30 * 1000; // 30 seconds
+
+ std::chrono::milliseconds staleLockTime = std::chrono::seconds{30};
QLockFile::LockError lockError = QLockFile::NoError;
bool isLocked = false;