diff --git a/threadloop.cpp b/threadloop.cpp
index a790578..371e939 100644
--- a/threadloop.cpp
+++ b/threadloop.cpp
@@ -102,6 +102,7 @@ void do_thread_work(ThreadData *threadData)
}
if ((cur_ev.events & EPOLLIN) || ((cur_ev.events & EPOLLOUT) && client->getSslReadWantsWrite()))
{
+ VectorClearGuard vectorClear(packetQueueIn);
bool readSuccess = client->readFdIntoBuffer();
client->bufferToMqttPackets(packetQueueIn, client);
@@ -111,6 +112,11 @@ void do_thread_work(ThreadData *threadData)
threadData->removeClient(client);
continue;
}
+
+ for (MqttPacket &packet : packetQueueIn)
+ {
+ packet.handle();
+ }
}
if ((cur_ev.events & EPOLLOUT) || ((cur_ev.events & EPOLLIN) && client->getSslWriteWantsRead()))
{
@@ -136,21 +142,6 @@ void do_thread_work(ThreadData *threadData)
}
}
}
-
- for (MqttPacket &packet : packetQueueIn)
- {
- try
- {
- packet.handle();
- }
- catch (std::exception &ex)
- {
- packet.getSender()->setDisconnectReason(ex.what());
- logger->logf(LOG_ERR, "MqttPacket handling error: %s. Removing client.", ex.what());
- threadData->removeClient(packet.getSender());
- }
- }
- packetQueueIn.clear();
}
try
diff --git a/threadloop.h b/threadloop.h
index 2262144..6877a5c 100644
--- a/threadloop.h
+++ b/threadloop.h
@@ -23,6 +23,24 @@ License along with FlashMQ. If not, see .
#define MAX_EVENTS 65536
+#include "forward_declarations.h"
+
+class VectorClearGuard
+{
+ std::vector &v;
+public:
+ VectorClearGuard(std::vector &v) :
+ v(v)
+ {
+
+ }
+
+ ~VectorClearGuard()
+ {
+ v.clear();
+ }
+};
+
void do_thread_work(ThreadData *threadData);