Merge branch 'fix_addframebadalloc'

This commit is contained in:
Andy Huska
2022-09-19 12:48:43 -05:00
+32
View File
@@ -672,8 +672,25 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
} }
if (!overwriteDups) if (!overwriteDups)
{
bool alloc_ok = true;
for(int i=0; i<3; i++)
{
try
{ {
frames.append(tempFrame); frames.append(tempFrame);
break;
}
catch (const std::exception& ex)
{
alloc_ok = false;
qDebug() << "addFrame failed to append. frames.length(): " << frames.length() << " Exception: " << ex.what();
}
}
if(alloc_ok)
{
if (filters[tempFrame.frameId()] && busFilters[tempFrame.bus]) if (filters[tempFrame.frameId()] && busFilters[tempFrame.bus])
{ {
if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count()); if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count());
@@ -682,6 +699,7 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
if (autoRefresh) endInsertRows(); if (autoRefresh) endInsertRows();
} }
} }
}
else //yes, overwrite dups else //yes, overwrite dups
{ {
bool found = false; bool found = false;
@@ -728,6 +746,20 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
void CANFrameModel::addFrames(const CANConnection*, const QVector<CANFrame>& pFrames) void CANFrameModel::addFrames(const CANConnection*, const QVector<CANFrame>& pFrames)
{ {
if(frames.length() > frames.capacity() * 0.99)
{
qDebug() << "Frames count: " << frames.length() << " of " << frames.capacity() << " capacity, removing first " << frames.capacity() * 0.05 << " frames";
frames.remove(0, frames.capacity() * 0.05);
qDebug() << "Frames removed, new count: " << frames.length();
}
if(filteredFrames.length() > filteredFrames.capacity() * 0.99)
{
qDebug() << "filteredFrames count: " << filteredFrames.length() << " of " << filteredFrames.capacity() << " capacity, removing first " << filteredFrames.capacity() * 0.05 << " frames";
filteredFrames.remove(0, filteredFrames.capacity() * 0.05);
qDebug() << "filteredFrames removed, new count: " << filteredFrames.length();
}
foreach(const CANFrame& frame, pFrames) foreach(const CANFrame& frame, pFrames)
{ {
addFrame(frame); addFrame(frame);