@@ -328,10 +328,14 @@ static void lowpan_list_entry_free(fragmenter_tx_list_t *list, fragmenter_tx_ent
328328 ns_dyn_mem_free (entry );
329329}
330330
331- static void lowpan_list_free (fragmenter_tx_list_t * list )
331+ static void lowpan_list_free (fragmenter_tx_list_t * list , bool fragment_buf_free )
332332{
333333 while (!ns_list_is_empty (list )) {
334334 fragmenter_tx_entry_t * entry = ns_list_get_first (list );
335+ if (!fragment_buf_free ) {
336+ //We can't free this pointer becuase it must be until interface is deleted
337+ entry -> fragmenter_buf = NULL ;
338+ }
335339 lowpan_list_entry_free (list , entry );
336340 }
337341}
@@ -388,11 +392,11 @@ int8_t lowpan_adaptation_interface_free(int8_t interface_id)
388392
389393 ns_list_remove (& fragmenter_interface_list , interface_ptr );
390394 //free active tx process
391- lowpan_list_free (& interface_ptr -> activeUnicastList );
395+ lowpan_list_free (& interface_ptr -> activeUnicastList , false );
392396 lowpan_active_buffer_state_reset (& interface_ptr -> active_broadcast_tx_buf );
393397
394398 //Free Indirect entry
395- lowpan_list_free (& interface_ptr -> indirect_tx_queue );
399+ lowpan_list_free (& interface_ptr -> indirect_tx_queue , true );
396400
397401 buffer_free_list (& interface_ptr -> directTxQueue );
398402
@@ -413,13 +417,13 @@ int8_t lowpan_adaptation_interface_reset(int8_t interface_id)
413417 }
414418
415419 //free active tx process
416- lowpan_list_free (& interface_ptr -> activeUnicastList );
420+ lowpan_list_free (& interface_ptr -> activeUnicastList , false );
417421 lowpan_active_buffer_state_reset (& interface_ptr -> active_broadcast_tx_buf );
418422 //Clean fragmented message flag
419423 interface_ptr -> fragmenter_active = false;
420424
421425 //Free Indirect entry
422- lowpan_list_free (& interface_ptr -> indirect_tx_queue );
426+ lowpan_list_free (& interface_ptr -> indirect_tx_queue , true );
423427
424428 buffer_free_list (& interface_ptr -> directTxQueue );
425429
0 commit comments