-
Mandatory normative statement MQTT-3.1.2-6.
-
[MQTT-2.3.1-1]
-
When there are many sessions, the copying action can actually take some time, and memory. A vector is faster and uses (a little) less memory. This is a theoretical fix, without benchmarks to support it.
-
The only mutable session data of a client is QoS related, so when we're copying sessions (for saving them), we need to lock the QoS data, because that gets modified from active client traffic in worker threads. Note: not super well tested at this point, nor was I ever able to trigger actual errors despite long stress testing, so it's a theoretical fix.
-
Empty leaves weren't removed, causing increase in memory use.
-
This method incurs no extra CPU load when messages aren't dropped.
-
One was confirmed: writing an mqtt packet into a client that disconnected after checking the weak pointer for validity. The rest made sense to change as well.
-
I have no explanation for it, but it happens (with QMQTT, should it matter).
-
It was a mistake that it ran inside the timer thread, which came to light by asserting the thread local authentication pointer (see a few commits ago).
-
There were bugs in which authentication object was used when, causing threadings bugs. Instead of getting from the 'sender', we can just store a thread local pointer.
-
Files are simple serialized bytes prefaced by lengths. File is hashed to verify integrity. This was also a good way preventing unexpected errors when trying to crash the parser by having it load a different file. This change includes some refactoring that was necessary: - It 'fixes' looking at the wrong thread's authentiction. This is still wrong though. It will be fixed by a thread local pointer in the next commit. - Deadlocks with yourself are handled in rwlockguard. - QoSPacketQueue is now a class. - Probably other tweaks.
-
It didn't clean up the old ones, causing unpredictable problems.
-
This fixes side effects when system time changes.
-
This performs a whole lot better.
-
Three parts to it: - Start the app fresh per test. This avoids annoyances like getting retained messages on subscribe, messing up the test. - Waiting for suback was apparently necessary. - Because the Qt event loop was given time, waiting for publishes was sometimes pointless because it had already arrived. So, checking the receive list first.
-
Fix version bug.