]> git.sesse.net Git - vlc/blobdiff - src/misc/objects.c
macosx: Ask to send a mail to our bugreport ML if a crash log is detected.
[vlc] / src / misc / objects.c
index 68dab874225a9f1b6dd30c389616d5c7f24001ab..96214c14d0710889a451e8df0252bc433da03894 100644 (file)
@@ -96,8 +96,8 @@ static void held_objects_destroy (void *);
  *****************************************************************************/
 static vlc_mutex_t     structure_lock;
 
-void *vlc_custom_create( vlc_object_t *p_this, size_t i_size,
-                         int i_type, const char *psz_type )
+void *__vlc_custom_create( vlc_object_t *p_this, size_t i_size,
+                           int i_type, const char *psz_type )
 {
     vlc_object_t *p_new;
     vlc_object_internals_t *p_priv;
@@ -242,10 +242,6 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type )
             i_size = sizeof(encoder_t);
             psz_type = "encoder";
             break;
-        case VLC_OBJECT_FILTER:
-            i_size = sizeof(filter_t);
-            psz_type = "filter";
-            break;
         case VLC_OBJECT_AOUT:
             i_size = sizeof(aout_instance_t);
             psz_type = "audio output";
@@ -305,7 +301,12 @@ static void vlc_object_destroy( vlc_object_t *p_this )
 
     /* If we are running on a thread, wait until it ends */
     if( p_priv->b_thread )
+    {
+        msg_Warn (p_this->p_libvlc, /* do NOT use a dead object for logging! */
+                  "%s %d destroyed while thread alive (VLC might crash)",
+                  p_this->psz_object_type, p_this->i_object_id);
         vlc_thread_join( p_this );
+    }
 
     /* Call the custom "subclass" destructor */
     if( p_priv->pf_destructor )
@@ -325,9 +326,9 @@ static void vlc_object_destroy( vlc_object_t *p_this )
 
     if( p_this->p_libvlc == NULL )
     {
+#ifndef NDEBUG
         libvlc_global_data_t *p_global = (libvlc_global_data_t *)p_this;
 
-#ifndef NDEBUG
         assert( p_global == vlc_global() );
         /* Test for leaks */
         if (p_priv->next != p_this)
@@ -545,35 +546,6 @@ int __vlc_object_timedwait( vlc_object_t *obj, mtime_t deadline )
 }
 
 
-/**
- * Checks whether an object has been "killed".
- * The object lock must be held.
- *
- * Typical code for an object thread could be:
- *
-   vlc_object_lock (self);
-   ...initialization...
-   while (vlc_object_alive (self))
-   {
-       ...preprocessing...
-
-       vlc_object_wait (self);
-
-       ...postprocessing...
-   }
-   ...deinitialization...
-   vlc_object_unlock (self);
- *
- *
- * @return true iff the object has not been killed yet
- */
-bool __vlc_object_alive( vlc_object_t *obj )
-{
-    vlc_assert_locked( &(vlc_internals(obj)->lock) );
-    return !obj->b_die;
-}
-
-
 /**
  * Signals an object for which the lock is held.
  * At least one thread currently sleeping in vlc_object_wait() or
@@ -612,6 +584,7 @@ void __vlc_object_kill( vlc_object_t *p_this )
     }
 
     vlc_object_signal_unlocked( p_this );
+    /* This also serves as a memory barrier toward vlc_object_alive(): */
     vlc_object_unlock( p_this );
 }