X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_properties.c;fp=src%2Fframework%2Fmlt_properties.c;h=7e55da91c72d09a96025625c0b82d7c83f4d34ee;hb=5e12f8d2792991db7e4e7a86c1e3585a56b16e4e;hp=4e3f22bd505d3495f162f62f4dd6e8838b5c81bc;hpb=1664eeeaf8535e2b65f8715fc8ebd09c941fdee8;p=melted diff --git a/src/framework/mlt_properties.c b/src/framework/mlt_properties.c index 4e3f22b..7e55da9 100644 --- a/src/framework/mlt_properties.c +++ b/src/framework/mlt_properties.c @@ -28,7 +28,7 @@ #include #include #include - +#include #include #include @@ -46,6 +46,7 @@ typedef struct int size; mlt_properties mirror; int ref_count; + pthread_mutex_t mutex; } property_list; @@ -82,6 +83,7 @@ int mlt_properties_init( mlt_properties this, void *child ) // Increment the ref count ( ( property_list * )this->local )->ref_count = 1; + pthread_mutex_init( &( ( property_list * )this->local )->mutex, NULL );; } // Check that initialisation was successful @@ -186,12 +188,15 @@ static inline void mlt_properties_do_mirror( mlt_properties this, const char *na int mlt_properties_inc_ref( mlt_properties this ) { + int result = 0; if ( this != NULL ) { property_list *list = this->local; - return ++ list->ref_count; + pthread_mutex_lock( &list->mutex ); + result = ++ list->ref_count; + pthread_mutex_unlock( &list->mutex ); } - return 0; + return result; } /** Maintain ref count to allow multiple uses of an mlt object. @@ -199,12 +204,15 @@ int mlt_properties_inc_ref( mlt_properties this ) int mlt_properties_dec_ref( mlt_properties this ) { + int result = 0; if ( this != NULL ) { property_list *list = this->local; - return -- list->ref_count; + pthread_mutex_lock( &list->mutex ); + result = -- list->ref_count; + pthread_mutex_unlock( &list->mutex ); } - return 0; + return result; } /** Return the ref count of this object. @@ -903,6 +911,7 @@ void mlt_properties_close( mlt_properties this ) } // Clear up the list + pthread_mutex_destroy( &list->mutex ); free( list->name ); free( list->value ); free( list );