In certain circumstances, reception of PB-ADV messages may trigger session close. This rearrange ACKs new verified messages before performing call-back to avoid situations where the session no longer exists after the message has been handled. This caused static analysis errors during provisioning, which are now addressed. --- mesh/net.c | 1 - mesh/pb-adv.c | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/mesh/net.c b/mesh/net.c index 61dd8be32..a60327272 100644 --- a/mesh/net.c +++ b/mesh/net.c @@ -2381,7 +2381,6 @@ static enum _relay_advice packet_received(void *user_data, l_info("RX: App 0x%04x -> 0x%04x : TTL 0x%02x : SEQ 0x%06x", net_src, net_dst, net_ttl, net_seq); - l_debug("seq:%x seq0:%x", net_seq, net_seqZero); if (net_ctl) { l_debug("CTL - %4.4x RX", net_seqZero); if (net_opcode == NET_OP_SEG_ACKNOWLEDGE) { diff --git a/mesh/pb-adv.c b/mesh/pb-adv.c index 586cd7f15..27cbc469e 100644 --- a/mesh/pb-adv.c +++ b/mesh/pb-adv.c @@ -254,7 +254,7 @@ static void pb_adv_packet(void *user_data, const uint8_t *pkt, uint16_t len) uint8_t type; bool first; - if (!session || pb_session != session) + if (!pb_session || pb_session != session) return; link_id = l_get_be32(pkt + 1); @@ -426,14 +426,14 @@ static void pb_adv_packet(void *user_data, const uint8_t *pkt, uint16_t len) return; } + send_ack(session, session->peer_trans_num); + if (session->last_peer_trans_num != session->peer_trans_num) { session->got_segs = 0; + session->last_peer_trans_num = session->peer_trans_num; session->rx_cb(session->user_data, session->sar, session->exp_len); } - - session->last_peer_trans_num = session->peer_trans_num; - send_ack(session, session->last_peer_trans_num); } } -- 2.21.0