Skip to content

Commit 11a6ff4

Browse files
authored
fix: multiple memory leaks and segfault issues in Flatbuffer Forwarder. (#709)
1 parent 8db85c9 commit 11a6ff4

File tree

4 files changed

+17
-8
lines changed

4 files changed

+17
-8
lines changed

dependencies/external/flatbuffers

Submodule flatbuffers updated 360 files

libsrc/flatbufserver/FlatBufferClient.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ void FlatBufferClient::readyRead()
4444
if((uint32_t) _receiveBuffer.size() < messageSize + 4) return;
4545

4646
// extract message only and remove header + msg from buffer :: QByteArray::remove() does not return the removed data
47-
const QByteArray msg = _receiveBuffer.right(messageSize);
47+
const QByteArray msg = _receiveBuffer.mid(4, messageSize);
4848
_receiveBuffer.remove(0, messageSize + 4);
4949

5050
const auto* msgData = reinterpret_cast<const uint8_t*>(msg.constData());
@@ -113,6 +113,8 @@ void FlatBufferClient::registationRequired(const int priority)
113113

114114
// send reply
115115
sendMessage();
116+
117+
_builder.Clear();
116118
}
117119
}
118120

@@ -133,6 +135,8 @@ void FlatBufferClient::handleRegisterCommand(const hyperionnet::Register *regReq
133135

134136
// send reply
135137
sendMessage();
138+
139+
_builder.Clear();
136140
}
137141

138142
void FlatBufferClient::handleImageCommand(const hyperionnet::Image *image)
@@ -192,7 +196,6 @@ void FlatBufferClient::sendMessage()
192196
_socket->write((const char *) sizeData, sizeof(sizeData));
193197
_socket->write((const char *)buffer, size);
194198
_socket->flush();
195-
_builder.Clear();
196199
}
197200

198201
void FlatBufferClient::sendSuccessReply()
@@ -202,6 +205,8 @@ void FlatBufferClient::sendSuccessReply()
202205

203206
// send reply
204207
sendMessage();
208+
209+
_builder.Clear();
205210
}
206211

207212
void FlatBufferClient::sendErrorReply(const std::string &error)
@@ -212,4 +217,6 @@ void FlatBufferClient::sendErrorReply(const std::string &error)
212217

213218
// send reply
214219
sendMessage();
220+
221+
_builder.Clear();
215222
}

libsrc/flatbufserver/FlatBufferConnection.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void FlatBufferConnection::readData()
6666
if((uint32_t) _receiveBuffer.size() < messageSize + 4) return;
6767

6868
// extract message only and remove header + msg from buffer :: QByteArray::remove() does not return the removed data
69-
const QByteArray msg = _receiveBuffer.right(messageSize);
69+
const QByteArray msg = _receiveBuffer.mid(4, messageSize);
7070
_receiveBuffer.remove(0, messageSize + 4);
7171

7272
const uint8_t* msgData = reinterpret_cast<const uint8_t*>(msg.constData());
@@ -117,6 +117,7 @@ void FlatBufferConnection::setColor(const ColorRgb & color, int priority, int du
117117

118118
_builder.Finish(req);
119119
sendMessage(_builder.GetBufferPointer(), _builder.GetSize());
120+
_builder.Clear();
120121
}
121122

122123
void FlatBufferConnection::setImage(const Image<ColorRgb> &image)
@@ -128,6 +129,7 @@ void FlatBufferConnection::setImage(const Image<ColorRgb> &image)
128129

129130
_builder.Finish(req);
130131
sendMessage(_builder.GetBufferPointer(), _builder.GetSize());
132+
_builder.Clear();
131133
}
132134

133135
void FlatBufferConnection::clear(int priority)
@@ -137,6 +139,7 @@ void FlatBufferConnection::clear(int priority)
137139

138140
_builder.Finish(req);
139141
sendMessage(_builder.GetBufferPointer(), _builder.GetSize());
142+
_builder.Clear();
140143
}
141144

142145
void FlatBufferConnection::clearAll()
@@ -193,7 +196,6 @@ void FlatBufferConnection::sendMessage(const uint8_t* buffer, uint32_t size)
193196
count += _socket.write(reinterpret_cast<const char *>(header), 4);
194197
count += _socket.write(reinterpret_cast<const char *>(buffer), size);
195198
_socket.flush();
196-
_builder.Clear();
197199
}
198200

199201
bool FlatBufferConnection::parseReply(const hyperionnet::Reply *reply)

libsrc/hyperion/MessageForwarder.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,9 @@ void MessageForwarder::handlePriorityChanges(const quint8 &priority)
118118
hyperion::Components activeCompId = _hyperion->getPriorityInfo(priority).componentId;
119119
if (activeCompId == hyperion::COMP_GRABBER || activeCompId == hyperion::COMP_V4L)
120120
{
121-
if ( !obj["proto"].isNull() )
121+
if ( !obj["flat"].isNull() )
122122
{
123-
const QJsonArray & addr = obj["proto"].toArray();
123+
const QJsonArray & addr = obj["flat"].toArray();
124124
for (const auto& entry : addr)
125125
{
126126
addFlatbufferSlave(entry.toString());
@@ -202,7 +202,7 @@ void MessageForwarder::addFlatbufferSlave(QString slave)
202202
return;
203203
}
204204

205-
// verify loop with protoserver
205+
// verify loop with flatbufserver
206206
const QJsonObject &obj = _hyperion->getSetting(settings::FLATBUFSERVER).object();
207207
if(QHostAddress(parts[0]) == QHostAddress::LocalHost && parts[1].toInt() == obj["port"].toInt())
208208
{

0 commit comments

Comments
 (0)