]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.0/liblfds610/src/lfds610_freelist/lfds610_freelist_delete.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.0 / liblfds610 / src / lfds610_freelist / lfds610_freelist_delete.c
1 #include "lfds610_freelist_internal.h"
2
3
4
5
6
7 /****************************************************************************/
8 void lfds610_freelist_delete( struct lfds610_freelist_state *fs, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )
9 {
10   struct lfds610_freelist_element
11     *fe;
12
13   void
14     *user_data;
15
16   assert( fs != NULL );
17   // TRD : user_data_delete_function can be NULL
18   // TRD : user_state can be NULL
19
20   // TRD : leading load barrier not required as it will be performed by the pop
21
22   while( lfds610_freelist_pop(fs, &fe) )
23   {
24     if( user_data_delete_function != NULL )
25     {
26       lfds610_freelist_get_user_data_from_element( fe, &user_data );
27       user_data_delete_function( user_data, user_state );
28     }
29
30     lfds610_liblfds_aligned_free( fe );
31   }
32
33   lfds610_liblfds_aligned_free( fs );
34
35   return;
36 }
37