+ vg_linear_allocator *alloc = vg_linear_header( buffer );
+
+ /* libc mode we recursively free any allocations made */
+ if( vg_mem.use_libc_malloc && (alloc->flags & VG_MEMORY_SYSTEM) )
+ {
+ for( u32 i=0; i<alloc->allocation_count; i++ )
+ {
+ vg_allocation_meta *meta = &alloc->alloc_table[i];
+
+ if( meta->type == k_allocation_type_block )
+ {
+ free( meta->data );
+ }
+ else
+ {
+ vg_linear_clear( meta->data );
+ vg_linear_allocator *sub = vg_linear_header( meta->data );
+
+ free( sub->alloc_table );
+ free( sub );
+ }
+ }
+ }