]> git.sesse.net Git - vlc/blobdiff - src/control/core.c
- Redo [22749]. Fix Mozilla plugin, fix OSX framework, fix the bindings.
[vlc] / src / control / core.c
index a1d2f9e5507adb9e35b130a19d6e8e475374acc5..08f550b61229261a10840a3e60f8451f6ed90845 100644 (file)
@@ -63,22 +63,39 @@ libvlc_exception_get_message( const libvlc_exception_t *p_exception )
     return NULL;
 }
 
+static void libvlc_exception_not_handled( const char *psz )
+{
+    fprintf( stderr, "*** LibVLC Exception not handled: %s\nSet a breakpoint in '%s' to debug.\n",
+             psz, __func__ );
+}
+
 void libvlc_exception_raise( libvlc_exception_t *p_exception,
                                            const char *psz_format, ... )
 {
     va_list args;
+    char * psz;
 
-    /* does caller care about exceptions ? */
-    if( p_exception == NULL ) return;
-
-    /* remove previous exception if it wasn't cleared */
-    libvlc_exception_clear( p_exception );
-
+    /* Unformat-ize the message */
     va_start( args, psz_format );
-    if( vasprintf( &p_exception->psz_message, psz_format, args ) == -1)
-        p_exception->psz_message = (char *)nomemstr;
+    if( vasprintf( &psz, psz_format, args ) == -1)
+        psz = (char *)nomemstr;
     va_end( args );
 
+    /* Does caller care about exceptions ? */
+    if( p_exception == NULL ) {
+        /* Print something, so lazy third-parties can easily
+         * notice that something may have gone unoticedly wrong */
+        libvlc_exception_not_handled( psz );
+        return;
+    }
+
+    /* Make sure that there is no unoticed previous exception */
+    if( p_exception->b_raised )
+    {
+        libvlc_exception_not_handled( p_exception->psz_message );
+        libvlc_exception_clear( p_exception );
+    }
+    p_exception->psz_message = psz;
     p_exception->b_raised = 1;
 }
 
@@ -129,7 +146,7 @@ void libvlc_retain( libvlc_instance_t *p_instance )
     vlc_mutex_unlock( &p_instance->instance_lock );
 }
 
-void libvlc_release( libvlc_instance_t *p_instance, libvlc_exception_t *p_e )
+void libvlc_release( libvlc_instance_t *p_instance )
 {
     vlc_mutex_t *lock = &p_instance->instance_lock;
     int refs;