X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Flibvlc.c;h=22d1183918bb2f47ffebb467dc10ce5a8ad03af2;hb=756001fb493805399a1802dfd0b169dee89e635d;hp=f68221ff121f39639baedfc0214c4333fb5352ef;hpb=2265c8f1cc3aa9d661b7662199f38e46faa9dad2;p=vlc diff --git a/src/libvlc.c b/src/libvlc.c index f68221ff12..22d1183918 100644 --- a/src/libvlc.c +++ b/src/libvlc.c @@ -105,6 +105,41 @@ static unsigned i_instances = 0; static bool b_daemon = false; +/***************************************************************************** + * vlc_gc_*. + *****************************************************************************/ +void __vlc_gc_incref( gc_object_t * p_gc ) +{ + assert( p_gc->i_gc_refcount > 0 ); + + /* FIXME: atomic version needed! */ + p_gc->i_gc_refcount ++; +} + +void __vlc_gc_decref( gc_object_t *p_gc ) +{ + assert( p_gc ); + assert( p_gc->i_gc_refcount > 0 ); + + /* FIXME: atomic version needed! */ + p_gc->i_gc_refcount -- ; + + if( p_gc->i_gc_refcount == 0 ) + { + p_gc->pf_destructor( p_gc ); + /* Do not use the p_gc pointer from now on ! */ + } +} + +void +__vlc_gc_init( gc_object_t * p_gc, void (*pf_destructor)( gc_object_t * ), + void * arg) +{ + p_gc->i_gc_refcount = 1; + p_gc->pf_destructor = pf_destructor; + p_gc->p_destructor_arg = arg; +} + /***************************************************************************** * Local prototypes *****************************************************************************/ @@ -760,7 +795,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, } free( psz_modules ); -#ifdef ENABLE_SOUT +#ifdef ENABLE_VLM /* Initialize VLM if vlm-conf is specified */ psz_parser = config_GetPsz( p_libvlc, "vlm-conf" ); if( psz_parser && *psz_parser ) @@ -927,7 +962,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, { playlist_t *p_playlist = pl_Yield( p_libvlc ); playlist_AddExt( p_playlist, val.psz_string, NULL, PLAYLIST_INSERT, 0, - -1, NULL, 0, true, false ); + -1, NULL, 0, true, pl_Unlocked ); pl_Release( p_libvlc ); } free( val.psz_string ); @@ -954,7 +989,7 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc ) vlc_object_release( p_intf ); /* for vlc_object_find() */ } -#ifdef ENABLE_SOUT +#ifdef ENABLE_VLM /* Destroy VLM if created in libvlc_InternalInit */ if( priv->p_vlm ) { @@ -1260,7 +1295,7 @@ static int GetFilenames( libvlc_int_t *p_vlc, int i_argc, const char *ppsz_argv[ playlist_t *p_playlist = pl_Yield( p_vlc ); playlist_AddExt( p_playlist, ppsz_argv[i_opt], NULL, PLAYLIST_INSERT, 0, -1, ( i_options ? &ppsz_argv[i_opt + 1] : NULL ), - i_options, true, false ); + i_options, true, pl_Unlocked ); pl_Release( p_vlc ); }