@@ -55,15 +55,15 @@ mesh::Packet* PacketQueue::removeByIdx(int i) {
5555 return item;
5656}
5757
58- void PacketQueue::add (mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for) {
58+ bool PacketQueue::add (mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for) {
5959 if (_num == _size) {
60- // TODO: log "FATAL: queue is full!"
61- return ;
60+ return false ;
6261 }
6362 _table[_num] = packet;
6463 _pri_table[_num] = priority;
6564 _schedule_table[_num] = scheduled_for;
6665 _num++;
66+ return true ;
6767}
6868
6969StaticPoolPacketManager::StaticPoolPacketManager (int pool_size): unused(pool_size), send_queue(pool_size), rx_queue(pool_size) {
@@ -82,7 +82,10 @@ void StaticPoolPacketManager::free(mesh::Packet* packet) {
8282}
8383
8484void StaticPoolPacketManager::queueOutbound (mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for) {
85- send_queue.add (packet, priority, scheduled_for);
85+ if (!send_queue.add (packet, priority, scheduled_for)) {
86+ MESH_DEBUG_PRINTLN (" queueOutbound: send queue full, dropping packet" );
87+ free (packet);
88+ }
8689}
8790
8891mesh::Packet* StaticPoolPacketManager::getNextOutbound (uint32_t now) {
@@ -106,7 +109,10 @@ mesh::Packet* StaticPoolPacketManager::removeOutboundByIdx(int i) {
106109}
107110
108111void StaticPoolPacketManager::queueInbound (mesh::Packet* packet, uint32_t scheduled_for) {
109- rx_queue.add (packet, 0 , scheduled_for);
112+ if (!rx_queue.add (packet, 0 , scheduled_for)) {
113+ MESH_DEBUG_PRINTLN (" queueInbound: rx queue full, dropping packet" );
114+ free (packet);
115+ }
110116}
111117mesh::Packet* StaticPoolPacketManager::getNextInbound (uint32_t now) {
112118 return rx_queue.get (now);
0 commit comments