]> git.sesse.net Git - vlc/commitdiff
libvlccore: Make sure vlc_gc_* function correctly assert() on common errors, and...
authorPierre d'Herbemont <pdherbemont@videolan.org>
Tue, 8 Jul 2008 19:32:49 +0000 (21:32 +0200)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Tue, 8 Jul 2008 19:35:43 +0000 (21:35 +0200)
include/vlc_common.h
src/libvlc.c
src/libvlccore.sym

index 451a008926ba35707d652a98a9ddf57a32da7948..cf504c62633d7815171268922c1fb6fc400447e6 100644 (file)
@@ -550,32 +550,10 @@ struct gc_object_t
     VLC_GC_MEMBERS
 };
 
-static inline void __vlc_gc_incref( gc_object_t * p_gc )
-{
-    p_gc->i_gc_refcount ++;
-};
-
-static inline void __vlc_gc_decref( gc_object_t *p_gc )
-{
-    if( !p_gc ) return;
-
-    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 ! */
-    }
-}
-
-static inline 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;
-}
+VLC_EXPORT(void, __vlc_gc_incref, ( gc_object_t * p_gc ));
+VLC_EXPORT(void, __vlc_gc_decref, ( gc_object_t * p_gc ));
+VLC_EXPORT(void, __vlc_gc_init, ( gc_object_t * p_gc,
+    void (*pf_destructor)( gc_object_t * ), void * arg));
 
 #define vlc_gc_incref( a ) __vlc_gc_incref( (gc_object_t *)a )
 #define vlc_gc_decref( a ) __vlc_gc_decref( (gc_object_t *)a )
index f68221ff121f39639baedfc0214c4333fb5352ef..7340e365f8634e003cca0401c586559986fbd691 100644 (file)
@@ -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
  *****************************************************************************/
index d74bd7a386ddc1b6fbf94ff4e87e7af0ff9cfa51..9ea497652c96b89cabf981b6fcb32521b77e71e9 100644 (file)
@@ -414,6 +414,9 @@ __vlc_execve
 vlc_fastmem_register
 vlc_freeaddrinfo
 vlc_gai_strerror
+__vlc_gc_incref
+__vlc_gc_init
+__vlc_gc_decref
 vlc_getaddrinfo
 vlc_getnameinfo
 vlc_gettext