summaryrefslogtreecommitdiffstats
path: root/src/plugins/canbus/tinycan
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/canbus/tinycan')
-rw-r--r--src/plugins/canbus/tinycan/tinycanbackend.cpp23
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