X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_pool.c;h=daa0d297b28e0573f44327cde91529e4283cf856;hb=7ac623df605d7daa8125b189cf77a937cfe03888;hp=5f891e93cbac5e357537e003926b6ae075894529;hpb=f8b2fa8e8e1552b78418d0c2c74f850d322ace69;p=melted diff --git a/src/framework/mlt_pool.c b/src/framework/mlt_pool.c index 5f891e9..daa0d29 100644 --- a/src/framework/mlt_pool.c +++ b/src/framework/mlt_pool.c @@ -22,6 +22,7 @@ #include "mlt_deque.h" #include +#include #include #include @@ -45,6 +46,7 @@ typedef struct mlt_pool_s typedef struct mlt_release_s { mlt_pool pool; + int references; } *mlt_release; @@ -92,11 +94,14 @@ static void *pool_fetch( mlt_pool this ) { // Pop the top of the stack ptr = mlt_deque_pop_back( this->stack ); + + // Assign the reference + ( ( mlt_release )ptr )->references = 1; } else { // We need to generate a release item - mlt_release release = malloc( sizeof( struct mlt_release_s ) + this->size ); + mlt_release release = memalign( 16, this->size ); // Initialise it if ( release != NULL ) @@ -104,6 +109,9 @@ static void *pool_fetch( mlt_pool this ) // Assign the pool release->pool = this; + // Assign the reference + release->references = 1; + // Determine the ptr ptr = ( void * )release + sizeof( struct mlt_release_s ); } @@ -126,7 +134,7 @@ static void pool_return( void *ptr ) if ( ptr != NULL ) { // Get the release pointer - mlt_release that = ( void * )ptr - sizeof( struct mlt_release_s ); + mlt_release that = ptr - sizeof( struct mlt_release_s ); // Get the pool mlt_pool this = that->pool; @@ -223,7 +231,7 @@ void *mlt_pool_alloc( int size ) int index = 8; // Minimum size pooled is 256 bytes - size = size + 4; + size = size + sizeof( mlt_release ); while ( ( 1 << index ) < size ) index ++; @@ -234,38 +242,6 @@ void *mlt_pool_alloc( int size ) return pool_fetch( pool ); } -/** Allocate size bytes from the pool. -*/ - -void *mlt_pool_allocate( int size, void **release ) -{ - // This is the real release structure we'll return - void *real = NULL; - - // This will be used to obtain the pool to use - mlt_pool pool = NULL; - - // Determines the index of the pool to use - int index = 0; - - // Minimum size pooled is 256 bytes - size = size >> 8; - while ( ( 1 << index ) < size ) - index ++; - - // Now get the pool at the index - pool = mlt_properties_get_data_at( pools, index + 1, NULL ); - - // Now get the real item - real = pool_fetch( pool ); - - // Assign to release - *release = real; - - // Otherwise return a NULL to indicate failure - return real; -} - /** Release the allocated memory. */