diff options
Diffstat (limited to 'src/plugins/canbus/tinycan')
-rw-r--r-- | src/plugins/canbus/tinycan/tinycanbackend.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/plugins/canbus/tinycan/tinycanbackend.cpp b/src/plugins/canbus/tinycan/tinycanbackend.cpp index 53b9872..68e8bb2 100644 --- a/src/plugins/canbus/tinycan/tinycanbackend.cpp +++ b/src/plugins/canbus/tinycan/tinycanbackend.cpp @@ -75,9 +75,16 @@ QList<QCanBusDeviceInfo> TinyCanBackend::interfaces() return result; } -Q_GLOBAL_STATIC(QList<TinyCanBackendPrivate *>, qChannels) +namespace { -static QMutex channelsGuard(QMutex::NonRecursive); +struct TinyCanGlobal { + QList<TinyCanBackendPrivate *> channels; + QMutex mutex; +}; + +} // namespace + +Q_GLOBAL_STATIC(TinyCanGlobal, gTinyCan) class WriteNotifier : public QTimer { @@ -110,8 +117,8 @@ static void DRV_CALLBACK_TYPE canRxEventCallback(quint32 index, TCanMsg *frame, Q_UNUSED(frame); Q_UNUSED(count); - QMutexLocker lock(&channelsGuard); - for (TinyCanBackendPrivate *p : qAsConst(*qChannels())) { + QMutexLocker lock(&gTinyCan->mutex); + for (TinyCanBackendPrivate *p : qAsConst(gTinyCan->channels)) { if (p->channelIndex == int(index)) { p->startRead(); return; @@ -124,16 +131,16 @@ TinyCanBackendPrivate::TinyCanBackendPrivate(TinyCanBackend *q) { startupDriver(); - QMutexLocker lock(&channelsGuard); - qChannels()->append(this); + QMutexLocker lock(&gTinyCan->mutex); + gTinyCan->channels.append(this); } TinyCanBackendPrivate::~TinyCanBackendPrivate() { cleanupDriver(); - QMutexLocker lock(&channelsGuard); - qChannels()->removeAll(this); + QMutexLocker lock(&gTinyCan->mutex); + gTinyCan->channels.removeAll(this); } struct BitrateItem |