This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

mesh advertiser crash when calling advertiser_packet_discard

Hi, I'm getting a crash when discarding an advertising packet.

Roughly what I do is:

// Setup
advertiser_instance_init(_advertiser, NULL, _buffer, MESH_ADVERTISER_BUF_SIZE);
advertiser_address_set(_advertiser, &address);
advertiser_interval_set(_advertiser, intervalMs);
advertiser_tx_power_set(_advertiser, txPower);
advertiser_enable(_advertiser);

// Advertise packet
_advPacket = advertiser_packet_alloc(_advertiser, 7 + ibeacon->size());
_advPacket->config.repeats = ADVERTISER_REPEAT_INFINITE;
advertiser_packet_send(_advertiser, _advPacket);

// Then half a second later, change the packet.
advertiser_packet_discard(_advertiser, _advPacket);
_advPacket = advertiser_packet_alloc(_advertiser, 7 + ibeacon->size());
_advPacket->config.repeats = ADVERTISER_REPEAT_INFINITE;
advertiser_packet_send(_advertiser, _advPacket);

Which crashes at advertiser_packet_discard().

GDB trace:

#1  0x0004dc1c in mesh_assertion_handler (pc=<optimized out>) at /home/vliedel/dev/bluenet-workspace-cmake/bluenet/tools/mesh_sdk/examples/common/src/assertion_handler_weak.c:54
#2  0x00043ac6 in packet_buffer_free (p_buffer=0x20004278 <MeshAdvertiser::init()::advertiser+92>, p_packet=0x20008330) at /home/vliedel/dev/bluenet-workspace-cmake/bluenet/tools/mesh_sdk/mesh/core/src/packet_buffer.c:396
#3  0x000474c6 in advertiser_packet_discard (p_adv=<optimized out>, p_packet=<optimized out>) at /home/vliedel/dev/bluenet-workspace-cmake/bluenet/tools/mesh_sdk/mesh/bearer/src/advertiser.c:378

It looks like packet_buffer_pop() should've been called.

But the mesh advertiser never calls that, as the packet is configured to repeat infinite.

So what would i need to do, in order to change the advertised packet?

Using:

nRF52832

SD 132 6.1.1

SDK 15.3.0

Mesh SDK 3.2.0.

Related