]> git.sesse.net Git - vlc/blobdiff - src/misc/objects.c
p_module_bank: move out of vlc_global
[vlc] / src / misc / objects.c
index 031b26d2cefae5b2b4901203183da630ee9c3160..790a126df57e3bfa3b671bc3a776699bdd486ce9 100644 (file)
@@ -147,10 +147,12 @@ void *__vlc_custom_create( vlc_object_t *p_this, size_t i_size,
         if( i_type == VLC_OBJECT_LIBVLC )
             p_new->p_libvlc = (libvlc_int_t*)p_new;
         else
+        {
             p_new->p_libvlc = NULL;
+            vlc_mutex_init( &structure_lock );
+        }
 
         p_this = p_priv->next = p_priv->prev = p_new;
-        vlc_mutex_init( &structure_lock );
     }
     else
         p_new->p_libvlc = p_this->p_libvlc;
@@ -305,40 +307,33 @@ static void vlc_object_destroy( vlc_object_t *p_this )
 
     free( p_this->psz_header );
 
-    if( p_this->p_libvlc == NULL )
-    {
 #ifndef NDEBUG
-        libvlc_global_data_t *p_global = (libvlc_global_data_t *)p_this;
-
-        assert( p_global == vlc_global() );
+    if( VLC_OBJECT(p_this->p_libvlc) == p_this )
+    {
         /* Test for leaks */
-        if (p_priv->next != p_this)
+        vlc_object_t *leaked = p_priv->next;
+        while( leaked != p_this )
         {
-            vlc_object_t *leaked = p_priv->next, *first = leaked;
-            do
-            {
-                /* We are leaking this object */
-                fprintf( stderr,
-                         "ERROR: leaking object (id:%i, type:%s, name:%s)\n",
-                         leaked->i_object_id, leaked->psz_object_type,
-                         leaked->psz_object_name );
-                /* Dump libvlc object to ease debugging */
-                vlc_object_dump( leaked );
-                fflush(stderr);
-                leaked = vlc_internals (leaked)->next;
-            }
-            while (leaked != first);
+            /* We are leaking this object */
+            fprintf( stderr,
+                     "ERROR: leaking object (id:%i, type:%s, name:%s)\n",
+                     leaked->i_object_id, leaked->psz_object_type,
+                     leaked->psz_object_name );
+            /* Dump object to ease debugging */
+            vlc_object_dump( leaked );
+            fflush(stderr);
+            leaked = vlc_internals (leaked)->next;
+        }
 
-            /* Dump global object to ease debugging */
+        if( p_priv->next != p_this )
+            /* Dump libvlc object to ease debugging */
             vlc_object_dump( p_this );
-            /* Strongly abort, cause we want these to be fixed */
-            abort();
-        }
+    }
 #endif
 
+    if( p_this->p_libvlc == NULL )
         /* We are the global object ... no need to lock. */
         vlc_mutex_destroy( &structure_lock );
-    }
 
     FREENULL( p_this->psz_object_name );
 
@@ -879,7 +874,7 @@ vlc_list_t * __vlc_list_find( vlc_object_t *p_this, int i_type, int i_mode )
          * not be shared across LibVLC instances. In the mean time, this ugly
          * hack is brought to you by Courmisch. */
         if (i_type == VLC_OBJECT_MODULE)
-            return vlc_list_find ((vlc_object_t *)vlc_global ()->p_module_bank,
+            return vlc_list_find ((vlc_object_t *)p_module_bank,
                                   i_type, FIND_CHILD);
         return vlc_list_find (p_this->p_libvlc, i_type, FIND_CHILD);