Skip to content

Commit 436ecec

Browse files
committed
Compact kept favorites when resetting the node database
1 parent 5923b18 commit 436ecec

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

src/mesh/NodeDB.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,15 +1603,19 @@ void NodeDB::resetNodes(bool keepFavorites)
16031603
numMeshNodes = 1;
16041604
if (keepFavorites) {
16051605
LOG_INFO("Clearing node database - preserving favorites");
1606-
for (size_t i = 0; i < meshNodes->size(); i++) {
1606+
// Compact favorites into contiguous low slots: zeroing in place leaves one above
1607+
// numMeshNodes, invisible to every `i < numMeshNodes` scan yet still serialized to flash.
1608+
for (size_t i = 1; i < meshNodes->size(); i++) {
16071609
meshtastic_NodeInfoLite &node = meshNodes->at(i);
1608-
if (i > 0 && !nodeInfoLiteIsFavorite(&node)) {
1609-
eraseNodeSatellites(node.num);
1610-
node = meshtastic_NodeInfoLite();
1611-
} else {
1610+
if (nodeInfoLiteIsFavorite(&node)) {
1611+
if (numMeshNodes != i)
1612+
meshNodes->at(numMeshNodes) = node;
16121613
numMeshNodes += 1;
1614+
} else if (node.num) {
1615+
eraseNodeSatellites(node.num);
16131616
}
1614-
};
1617+
}
1618+
std::fill(nodeDatabase.nodes.begin() + numMeshNodes, nodeDatabase.nodes.end(), meshtastic_NodeInfoLite());
16151619
} else {
16161620
LOG_INFO("Clearing node database - removing favorites");
16171621
for (size_t i = 1; i < meshNodes->size(); i++) {

0 commit comments

Comments
 (0)