Port from implicit to explicit atomic integer operations
The old code used the implicit conversions from QAtomicInteger<T> to T and vice versa. The semantics of these differ from the ones std::atomic uses, so we're going to deprecate these, like we did for load() and store(), too. This patch fixex some users of these APIs before we deprecate them. Change-Id: I4877276581757cd57e042efea8296fe535a493d1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
e36e32c213
commit
5220b40edd
2
src/3rdparty/forkfd/forkfd.c
vendored
2
src/3rdparty/forkfd/forkfd.c
vendored
@ -267,7 +267,7 @@ static int tryReaping(pid_t pid, struct pipe_payload *payload)
|
|||||||
static void freeInfo(Header *header, ProcessInfo *entry)
|
static void freeInfo(Header *header, ProcessInfo *entry)
|
||||||
{
|
{
|
||||||
entry->deathPipe = -1;
|
entry->deathPipe = -1;
|
||||||
entry->pid = 0;
|
ffd_atomic_store(&entry->pid, 0, FFD_ATOMIC_RELEASE);
|
||||||
|
|
||||||
(void)ffd_atomic_add_fetch(&header->busyCount, -1, FFD_ATOMIC_RELEASE);
|
(void)ffd_atomic_add_fetch(&header->busyCount, -1, FFD_ATOMIC_RELEASE);
|
||||||
assert(header->busyCount >= 0);
|
assert(header->busyCount >= 0);
|
||||||
|
@ -359,17 +359,17 @@ Q_NEVER_INLINE void QRandomGenerator::SystemGenerator::generate(quint32 *begin,
|
|||||||
quint32 *buffer = begin;
|
quint32 *buffer = begin;
|
||||||
qsizetype count = end - begin;
|
qsizetype count = end - begin;
|
||||||
|
|
||||||
if (Q_UNLIKELY(uint(qt_randomdevice_control) & SetRandomData)) {
|
if (Q_UNLIKELY(uint(qt_randomdevice_control.loadAcquire()) & SetRandomData)) {
|
||||||
uint value = uint(qt_randomdevice_control) & RandomDataMask;
|
uint value = uint(qt_randomdevice_control.loadAcquire()) & RandomDataMask;
|
||||||
std::fill_n(buffer, count, value);
|
std::fill_n(buffer, count, value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
qsizetype filled = 0;
|
qsizetype filled = 0;
|
||||||
if (qt_has_hwrng() && (uint(qt_randomdevice_control) & SkipHWRNG) == 0)
|
if (qt_has_hwrng() && (uint(qt_randomdevice_control.loadAcquire()) & SkipHWRNG) == 0)
|
||||||
filled += qt_random_cpu(buffer, count);
|
filled += qt_random_cpu(buffer, count);
|
||||||
|
|
||||||
if (filled != count && (uint(qt_randomdevice_control) & SkipSystemRNG) == 0) {
|
if (filled != count && (uint(qt_randomdevice_control.loadAcquire()) & SkipSystemRNG) == 0) {
|
||||||
qsizetype bytesFilled =
|
qsizetype bytesFilled =
|
||||||
fillBuffer(buffer + filled, (count - filled) * qsizetype(sizeof(*buffer)));
|
fillBuffer(buffer + filled, (count - filled) * qsizetype(sizeof(*buffer)));
|
||||||
filled += bytesFilled / qsizetype(sizeof(*buffer));
|
filled += bytesFilled / qsizetype(sizeof(*buffer));
|
||||||
@ -1222,7 +1222,7 @@ void QRandomGenerator::_fillRange(void *buffer, void *bufferEnd)
|
|||||||
quint32 *begin = static_cast<quint32 *>(buffer);
|
quint32 *begin = static_cast<quint32 *>(buffer);
|
||||||
quint32 *end = static_cast<quint32 *>(bufferEnd);
|
quint32 *end = static_cast<quint32 *>(bufferEnd);
|
||||||
|
|
||||||
if (type == SystemRNG || Q_UNLIKELY(uint(qt_randomdevice_control) & (UseSystemRNG|SetRandomData)))
|
if (type == SystemRNG || Q_UNLIKELY(uint(qt_randomdevice_control.loadAcquire()) & (UseSystemRNG|SetRandomData)))
|
||||||
return SystemGenerator::self().generate(begin, end);
|
return SystemGenerator::self().generate(begin, end);
|
||||||
|
|
||||||
SystemAndGlobalGenerators::PRNGLocker lock(this);
|
SystemAndGlobalGenerators::PRNGLocker lock(this);
|
||||||
|
@ -76,7 +76,9 @@ Q_CORE_EXPORT QBasicAtomicInteger<uint> qt_randomdevice_control = Q_BASIC_ATOMIC
|
|||||||
#elif defined(QT_BUILD_INTERNAL)
|
#elif defined(QT_BUILD_INTERNAL)
|
||||||
extern Q_CORE_EXPORT QBasicAtomicInteger<uint> qt_randomdevice_control;
|
extern Q_CORE_EXPORT QBasicAtomicInteger<uint> qt_randomdevice_control;
|
||||||
#else
|
#else
|
||||||
enum { qt_randomdevice_control = 0 };
|
static const struct {
|
||||||
|
uint loadAcquire() const { return 0; }
|
||||||
|
} qt_randomdevice_control;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inline bool qt_has_hwrng()
|
inline bool qt_has_hwrng()
|
||||||
|
@ -421,7 +421,7 @@ void QObjectPrivate::ConnectionData::cleanOrphanedConnectionsImpl(QObject *sende
|
|||||||
ConnectionOrSignalVector *c = nullptr;
|
ConnectionOrSignalVector *c = nullptr;
|
||||||
{
|
{
|
||||||
QBasicMutexLocker l(signalSlotLock(sender));
|
QBasicMutexLocker l(signalSlotLock(sender));
|
||||||
if (ref > 1)
|
if (ref.loadAcquire() > 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Since ref == 1, no activate() is in process since we locked the mutex. That implies,
|
// Since ref == 1, no activate() is in process since we locked the mutex. That implies,
|
||||||
|
@ -279,7 +279,7 @@ public:
|
|||||||
void removeConnection(Connection *c);
|
void removeConnection(Connection *c);
|
||||||
void cleanOrphanedConnections(QObject *sender)
|
void cleanOrphanedConnections(QObject *sender)
|
||||||
{
|
{
|
||||||
if (orphaned.loadRelaxed() && ref == 1)
|
if (orphaned.loadRelaxed() && ref.loadAcquire() == 1)
|
||||||
cleanOrphanedConnectionsImpl(sender);
|
cleanOrphanedConnectionsImpl(sender);
|
||||||
}
|
}
|
||||||
void cleanOrphanedConnectionsImpl(QObject *sender);
|
void cleanOrphanedConnectionsImpl(QObject *sender);
|
||||||
|
Loading…
Reference in New Issue
Block a user