+/** Purge unused items in the pool.
+ *
+ * A form of garbage collection.
+ * \public \memberof mlt_pool_s
+ */
+
+void mlt_pool_purge( )
+{
+ int i = 0;
+
+ // For each pool
+ for ( i = 0; i < mlt_properties_count( pools ); i ++ )
+ {
+ // Get the pool
+ mlt_pool self = mlt_properties_get_data_at( pools, i, NULL );
+
+ // Pointer to unused memory
+ void *release = NULL;
+
+ // Lock the pool
+ pthread_mutex_lock( &self->lock );
+
+ // We'll free all unused items now
+ while ( ( release = mlt_deque_pop_back( self->stack ) ) != NULL )
+ free( ( char * )release - sizeof( struct mlt_release_s ) );
+
+ // Unlock the pool
+ pthread_mutex_unlock( &self->lock );
+ }
+}
+