]> git.sesse.net Git - vlc/commitdiff
control/core.c: Print an error on not handled libvlc exception. We'd better encourage...
authorPierre d'Herbemont <pdherbemont@videolan.org>
Sun, 2 Dec 2007 18:52:50 +0000 (18:52 +0000)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Sun, 2 Dec 2007 18:52:50 +0000 (18:52 +0000)
src/control/core.c

index a1d2f9e5507adb9e35b130a19d6e8e475374acc5..6dd84570fb99f1b1611079064fdadea7dd815c94 100644 (file)
@@ -63,22 +63,38 @@ libvlc_exception_get_message( const libvlc_exception_t *p_exception )
     return NULL;
 }
 
+void libvlc_exception_not_handled( const char *psz )
+{
+    fprintf( stderr, "*** LibVLC Exception not handled: %s\nSet a breakpoint in '%s' to debug.\n", psz, __FUNCTION__ );
+}
+
 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;
 }