Helixis 1.0
Task Programming API
sources/liblfds/queue/queue_delete.c
Go to the documentation of this file.
00001 #include "queue_internal.h"
00002 #if defined(HLX_BUILD_WITH_PARALLEL_THREADING)
00003 extern hlx_api gl_api;
00004 
00005 
00006 
00007 /****************************************************************************/
00008 void queue_delete( struct queue_state *qs, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )
00009 {
00010   void
00011     *user_data;
00012 
00013   /* TRD : user_data_delete_function can be 0 */
00014   /* TRD : user_state can be 0 */
00015 
00016   while( queue_dequeue(qs, &user_data) )
00017     if( user_data_delete_function != 0 )
00018       user_data_delete_function( user_data, user_state );
00019 
00020   /* TRD : fully dequeuing will leave us
00021            with a single dummy element
00022            which both qs->enqueue and qs->dequeue point at
00023            we push this back onto the freelist
00024            before we delete the freelist
00025   */
00026 
00027   freelist_push( qs->fs, qs->enqueue[QUEUE_POINTER]->fe );
00028 
00029   freelist_delete( qs->fs, queue_internal_freelist_delete_function, 0 );
00030 
00031   gl_api.aligned_free_entry( qs );
00032 
00033   return;
00034 }
00035 
00036 
00037 
00038 
00039 
00040 /****************************************************************************/
00041 #pragma warning( disable : 4100 )
00042 
00043 void queue_internal_freelist_delete_function( void *user_data, void *user_state )
00044 {
00045   gl_api.aligned_free_entry( user_data );
00046 
00047   return;
00048 }
00049 
00050 #pragma warning( default : 4100 )
00051 
00052 #endif /* !HLX_BUILD_WITH_PARALLEL_THREADING */
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines